0

我有一个 OpenGL 实现,据说应该可以渲染到纹理数组。这是通过在几何着色器中选择不同的层来实现的。但是,问题是由于 ATI 驱动程序错误,这不起作用。我真的很想让这个工作,我想出了几个替代方案,关于如何继续:

  1. 重新制作 Direct3D 中的实现,ATI 驱动程序在 D3D 上是否更好?
  2. 想出一个解决方法(虽然想不出)。
  3. 买一张英伟达卡。

我应该怎么办?还有其他选择吗?

4

2 回答 2

1

这是一种过时的方式,但它应该适用于 ATI 卡。这会将深度图渲染为纹理,但您几乎可以渲染任何东西。

// generate texture (in init method)
init(){...
glGenTextures(1, &depthTexture);
glBindTexture(GL_TEXTURE_2D, depthTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
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_DEPTH_COMPONENT, 512,
512, 0, GL_DEPTH_COMPONENT,GL_FLOAT, 0);}

// draw the mesh to fill the depth buffer
glDisable(GL_LIGHTING);
draw_mesh();
// copy depth buffer to texture
glBindTexture(GL_TEXTURE_2D, depthTexture);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 512, 512);
// clear screen
cls();
// enable texturing and bind the depth texture
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, depthTexture);
// overlay texture to fullsizequad
drawFullsizeQuad();
于 2011-05-24T09:46:27.803 回答
0

考虑向 ATI 提交错误:您的测试用例(分层渲染)应该很小并且 100% 可重现。

于 2011-04-17T02:49:58.090 回答