首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >OpenGL ES 3.0.浮点纹理

OpenGL ES 3.0.浮点纹理
EN

Stack Overflow用户
提问于 2013-10-15 08:04:49
回答 1查看 5K关注 0票数 6

我有OpenGL es3.0,我正在尝试创建一个纹理:

代码语言:javascript
运行
复制
case 1: glTexImage2D(GL_TEXTURE_2D, 0, GL_R16F, width, height, 0, GL_RED, GL_HALF_FLOAT, 0); break;
case 2: glTexImage2D(GL_TEXTURE_2D, 0, GL_RG16F, width, height, 0, GL_RG, GL_HALF_FLOAT, 0); break;
case 3: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, width, height, 0, GL_RGB, GL_HALF_FLOAT, 0); break;

(对于此代码,glGetError()返回0)

代码语言:javascript
运行
复制
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureHandle, 0);

但是,当附加到框架缓冲区时,glCheckFramebufferStatus(GL_FRAMEBUFFER)返回36054。

代码语言:javascript
运行
复制
Surface CreateSurface(GLsizei width, GLsizei height, int numComponents)
{
 GLuint fboHandle;
 glGenFramebuffers(1, &fboHandle);
 glBindFramebuffer(GL_FRAMEBUFFER, fboHandle);

 GLuint textureHandle;
 glGenTextures(1, &textureHandle);
 glBindTexture(GL_TEXTURE_2D, textureHandle);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

 switch (numComponents) {
        case 1: glTexImage2D(GL_TEXTURE_2D, 0, GL_R16F, width, height, 0, GL_RED, GL_HALF_FLOAT, 0); break;
        case 2: glTexImage2D(GL_TEXTURE_2D, 0, GL_RG16F, width, height, 0, GL_RG, GL_HALF_FLOAT, 0); break;
        case 3: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, width, height, 0, GL_RGB, GL_HALF_FLOAT, 0); break;
        default: PezFatalError("Illegal slab format.");
    }


 PezCheckCondition(GL_NO_ERROR == glGetError(), "Unable to create normals texture");

 GLuint colorbuffer;
 glGenRenderbuffers(1, &colorbuffer);
 glBindRenderbuffer(GL_RENDERBUFFER, colorbuffer);
 glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureHandle, 0);
 PezCheckCondition(GL_NO_ERROR == glGetError(), "Unable to attach color buffer");

 PezCheckCondition(GL_FRAMEBUFFER_COMPLETE == glCheckFramebufferStatus(GL_FRAMEBUFFER), "Unable to create FBO.");
 Surface surface = { fboHandle, textureHandle, numComponents };

 glClearColor(0, 0, 0, 0);
 glClear(GL_COLOR_BUFFER_BIT);
 glBindFramebuffer(GL_FRAMEBUFFER, 0);

 return surface;
}

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-15 11:17:28

附加到GL_COLOR_ATTACHMENTn的纹理需要使用颜色可渲染的格式.不幸的是,浮点格式不是彩色可渲染的.有关颜色可呈现格式的列表,请查看表3.12 in 3.0.2.pdf

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19376095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档