小编dar*_*ius的帖子

是否可以使用多目标渲染清除帧缓冲区中的某些纹理?

我有一个framebuffer对象,我在其中使用N个纹理上的多目标渲染.在某个时候,我想清除其中一些纹理的内容,但不是全部.如果我打电话

glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)

绑定到FBO的每个纹理都将被清除(我是对的吗?).有没有办法在特定的绘制缓冲区/纹理上执行此操作?

opengl fbo

15
推荐指数
1
解决办法
5645
查看次数

切换FBO时是否保持glEnable?

当我用glEnable设置东西,或者为我启用的东西指定func,然后切换帧缓冲区对象时,我的设置是为每个帧缓冲区对象保留的,还是我必须为每个缓冲区对象设置它们?在实践中,这有效吗?

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT); 
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
for int i=0; i<N; i++{
     glBindFramebuffer(GL_FRAMEBUFFER, fbos[i]);
     rendering something to the fbos here
}
Run Code Online (Sandbox Code Playgroud)

或者我必须写

for int i=0; i<N; i++{
     glBindFramebuffer(GL_FRAMEBUFFER, fbos[i]);
     glEnable(GL_CULL_FACE);
     glCullFace(GL_FRONT); 
     glEnable(GL_DEPTH_TEST);
     glDepthMask(GL_TRUE);
     rendering something to the fbos here
}
Run Code Online (Sandbox Code Playgroud)

编辑:那glUseProgram呢?那是保留的吗?

opengl fbo

5
推荐指数
1
解决办法
319
查看次数

glsl性能:tan(acos(x))vs sqrt(1-x*x)/ x

我正在编写一个glsl片段着色器,其中我使用阴影贴图.按照本教程http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/,我写了这一行来评估shaodw偏见以避免阴影痤疮

float bias = 0.005 * tan( acos ( N_L_dot ) );
Run Code Online (Sandbox Code Playgroud)

但我从数学上知道

tan ( acos ( x ) = sqrt ( 1 - x^2 ) / x
Run Code Online (Sandbox Code Playgroud)

使用这种身份而不是棕褐色和acos会更快吗?在实践中,要使用这行代码

float bias = 0.005 * sqrt ( 1.f - N_L_dot * N_L_dot   ) / N_L_dot ;
Run Code Online (Sandbox Code Playgroud)

我认为我的问题类似于"在执行sqrt和划分或tan和acos时,gpu更快吗?" ......或者我错过了什么?

opengl glsl shadow-mapping

3
推荐指数
1
解决办法
1367
查看次数

是否有等价的#if可以评估模板参数?

所述#if预处理指令评估已知的预处理器"的常数"的表达.是否有类似的东西可以评估模板参数的表达式?

在实践中,我有这样的事情:

template<int i>    
class Elem{ /*...*/};

#ifndef NUM_ELEM
#define NUM_ELEM 2 
#endif    

class MyClass
{

    #if NUM_ELEM >= 1
        Elem<1> e_1;
    #endif
    #if NUM_ELEM >= 2
        Elem<2> e_2;
    #endif
    #if NUM_ELEM >= 3
        Elem<3> e_3;
    #endif

    /*...*/
}
Run Code Online (Sandbox Code Playgroud)

但我真的想让MyClass成为一个模板:

template<int num_elem>
MyClass{

    #if num_elem >= 1 //but #if can't understand num_elem
        Elem<1> e_1;
    #endif
    #if num_elem >= 2
        Elem<2> e_2;
    #endif
    #if num_elem >= 3
        Elem<3> e_3;
    #endif 

    /*...*/
};
Run Code Online (Sandbox Code Playgroud)

c++ macros templates

3
推荐指数
1
解决办法
107
查看次数

纹理可以绑定到多个fbo吗?

可以将相同的纹理绑定到多个帧缓冲对象吗?我需要在具有特定fbo的多目标渲染过程中写入一些纹理,然后稍后为这些纹理中的一个添加一些混合,所以我需要第二个带有该纹理的帧缓冲对象.

opengl fbo

1
推荐指数
1
解决办法
1205
查看次数

标签 统计

opengl ×4

fbo ×3

c++ ×1

glsl ×1

macros ×1

shadow-mapping ×1

templates ×1