gpt4 book ai didi

iphone - OpenGL ES;渲染从 CGBitmapContext 创建的纹理

转载 作者:行者123 更新时间:2023-12-03 20:58:51 24 4
gpt4 key购买 nike

我正在执行以下命令,这是我从几个不同的教程中得出的(只是一个渲染 channel ,未显示初始化代码,但对于无纹理基元来说效果很好):

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0, xSize, 0, ySize, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);

glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glEnable(GL_TEXTURE_2D);
glBlendFunc(GL_ONE, GL_SRC_COLOR);

GLuint texture[1];
glGenTextures(1, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

int width = 50;
int height = 50;
void* textureData = malloc(width * height * 4);
CGColorSpaceRef cSp = CGColorSpaceCreateDeviceRGB();
CGContextRef ct = CGBitmapContextCreate(textureData, width, height, 8, width*4, cSp, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

CGContextSetRGBFillColor(ct, 0, 1, 0, 1);
CGContextFillRect(ct, CGRectMake(0, 0, 50, 50));
CGContextRelease(ct);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);

float verts[] = {
0.0f, 0.0f, 0.0f,
50.0f, 0.0f, 0.0f,
0.0f, 50.0f, 0.0f,
50.0f, 50.0f, 0.0f
};

float texCords[] = {
0.0f, 0.0f,
1.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f
};

glVertexPointer(3, GL_FLOAT, 0, verts);
glTexCoordPointer(2, GL_FLOAT, 0, texCords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisable(GL_TEXTURE_2D);

结果是一个白色方 block 。不是预期的绿色。谁能发现我的代码中导致渲染失败的错误吗?

我希望能够使其正常工作,然后将其转移到文本渲染。

最佳答案

问题是 widthheight 不是 2 的幂。解决办法有两种:

  • 使用纹理矩形扩展。将纹理目标设置为 GL_TEXTURE_RECTANGLE_ARB 而不是 GL_TEXTURE_2D。在使用此扩展之前,您必须启用它。请注意,矩形纹理不支持 mipmap。
  • 使用 2 的幂作为纹理尺寸。

关于iphone - OpenGL ES;渲染从 CGBitmapContext 创建的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2713890/

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