使用ATI硬件渲染到纹理阵列

时间:2011-04-15 22:21:35

标签: opengl 3d ati

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

  1. 重新制作Direct3D中的实现,D3D的ATI驱动程序更好吗?
  2. 想出一个解决方法(但不能想到)。
  3. 购买nVidia卡。
  4. 我该怎么办?还有其他选择吗?

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

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