gpt4 book ai didi

ios - 为 GLKView 设置着色器的正确位置?

转载 作者:行者123 更新时间:2023-12-01 19:07:53 24 4
gpt4 key购买 nike

我无法找到正确的位置来为使用 GLKView 和 GLKViewController 的 OpenGLES 应用程序进行着色器设置。

看起来 viewDidLoad 是一个很自然的地方,但是当我在这里尝试这样做时,着色器创建失败。我的设置是这样的:

//shader helper method
int setupShaders(const char* vShader, const char* fShader); //returns a program handle

//inside GLKViewController subclass

static int program;

-(void)viewDidLoad{
[super viewDidLoad];
program = setupShaders(vsh, fsh); //program will be zero indicating setup failure
}

我知道设置代码有效,因为如果我在 -(void)glkView:(GLKView *)view drawInRect:(CGRect)rect 中调用它,它就会成功。

所以我假设当调用 -(void)viewDidLoad 时 OpenGL 没有完全初始化,或者必须做一些事情来为我正在尝试做的设置设置正确的 OpenGL 上下文,我只是找不到任何文档关于在哪里或如何正确进行设置。

最佳答案

您是对的,最早可以轻松设置着色器的位置是drawRect。方法。这是因为必须有一个有效的 GL 上下文当前。根据 GLKView documentation :

Before calling its drawRect: method, the view makes its EAGLContext object the current OpenGL ES context and binds its framebuffer object to the OpenGL ES context as the target for rendering commands.



因此,最简单的做法是保留一些信息,例如 program句柄,并且仅在它非零时才初始化。
if (program == 0)
program = setupShaders(vsh, fsh);

如果您不喜欢这种方法,您可以考虑使用您提供的上下文初始化您的 GLKView,或覆盖 bindDrawable .或者您不能使用 GLKView 并手动执行操作...

关于ios - 为 GLKView 设置着色器的正确位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18596031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com