gpt4 book ai didi

opengl - glTexSubImage2D 无法正常工作

转载 作者:行者123 更新时间:2023-12-01 10:47:57 27 4
gpt4 key购买 nike

我编写了一个非常简单的 OpenGL 应用程序。它的目标是加载纹理并将其绘制在平面上。如果我使用函数“glTexSubImage2D”,则平面没有纹理,函数“glGetError”返回错误“1281”(无效值)。但是,如果我使用函数 'glTexImage2D' 我的平面纹理正确(并且我没有错误)。

这是我的一段代码:

void core::RootDevice::LoadTexture(char const *pFileName)
{
SDL_Surface *pSurface = IMG_Load(pFileName);
char *pPixels = reinterpret_cast<char*>(pSurface->pixels);
uint32_t bytePerPixel = pSurface->format->BitsPerPixel;

glGenTextures(1, &textureId);
glBindTexture(GL_TEXTURE_2D, textureId);
{
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pboID);
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, pSurface->w, //NO ERROR : All is ok
//pSurface->h, 0, GL_RGB, GL_UNSIGNED_BYTE, pPixels);

glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, pSurface->w, //ERROR : 1281
pSurface->h, GL_RGB, GL_UNSIGNED_BYTE, pPixels);

std::cout << glGetError() << std::endl;
getchar();
}
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
}
glBindTexture(GL_TEXTURE_2D, 0);
}

和渲染代码:
void core::RootDevice::Render(void)
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureId);
{
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(1.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 0.0f);
glEnd();
}
glBindTexture(GL_TEXTURE_2D, 0);
}

结果如下:

enter image description here

有人可以帮助我吗?

最佳答案

glTexSubImage2D()用于替换已分配图像数据的部分或全部纹理。您必须调用 glTexImage2D()在纹理上至少一次,您可以使用 glTexSubImage2D()在上面。不像 glTexSubImage2D() , glTexImage2D()分配图像数据。您可以使用 NULL对于 data 的最后一个 ( glTexImage2D() ) 参数如果您只想分配图像数据,然后将数据设置为glTexSubImage2D() .

较新版本的 OpenGL(4.4 和 ES 3.0)有一个新的入口点 glTexStorage2D()可用作glTexImage2D() 的替代品为纹理分配图像数据而不指定数据。类似于调用 glTexImage2D()data = NULL , 但如果需要 mipmap 空间,也允许提前指定。

关于opengl - glTexSubImage2D 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23631129/

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