小编mav*_*888的帖子

在OpenGL中使用fence同步对象

我试图寻找可以在OpenGL中使用Sync Objects的场景.我的理解是,一旦放入GL命令流(使用glFenceSync())的同步对象将在执行并实现所有GL命令后发出信号.如果同步对象是同步原语,为什么我们不能手动发信号呢?这个功能究竟在哪里可以帮助GL程序员?

以下方案是否正确?

Thread 1 :

Load model
Draw()
glFenceSync()

Thread 2 :

glWaitSync();
ReadPixels
Use data for subsequent operation.
Run Code Online (Sandbox Code Playgroud)

这是否意味着除非在线程1中调用glFenceSync(),否则我无法启动线程2?

opengl synchronization opengl-3

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

glBindBufferRange()问题OpenGL 3.1

我的顶点着色器是,

uniform Block1{    vec4 offset_x1;   vec4 offset_x2;}block1;

out float value;

in vec4 position;

void main()
{
    value = block1.offset_x1.x + block1.offset_x2.x;            

    gl_Position = position;
}
Run Code Online (Sandbox Code Playgroud)

我用来传递值的代码是:

GLfloat color_values[8];// contains valid values

glGenBuffers(1,&buffer_object);

glBindBuffer(GL_UNIFORM_BUFFER,buffer_object);

glBufferData(GL_UNIFORM_BUFFER,sizeof(color_values),color_values,GL_STATIC_DRAW);

glUniformBlockBinding(psId,blockIndex,0);

glBindBufferRange(GL_UNIFORM_BUFFER,0,buffer_object,0,16);                                              

glBindBufferRange(GL_UNIFORM_BUFFER,0,buffer_object,16,16);
Run Code Online (Sandbox Code Playgroud)

我期待的是,为每个vec4制服传递16个字节.对于offset = 16,size = 16,我得到GL_INVALID_VALUE错误.我对偏移值感到困惑.Spec说它对应于"buffer_object".

opengl glsl opengl-3

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

在glVertexAttribPointer()中使用GL_INT_2_10_10_10_REV

谁能告诉我在glVertexAttribPointer()中我们如何使用GL_INT_2_10_10_10_REV作为类型参数呢?我试图使用此类型传递颜色值.此类型中"REV"后缀的含义是什么?是否需要在着色器中进行任何特殊处理?

我的代码如下:

GLuint red=1023,green=1023,blue=1023,alpha=3;

GLuint val = 0;
val = val | (alpha << 30);
val = val | (blue << 20);
val = val | (green << 10);
val = val | (red << 0);

GLuint test_data[]={val,val,val,val};

loadshaders();

glBindAttribLocation(ps,0,"tk_position");

glBindAttribLocation(ps,1,"color");

LinkShader();

glUseProgram(ps);

glEnableVertexAttribArray (0);

glVertexAttribPointer(0, 4, GL_FLOAT, 0, 0, vertices);

glEnableVertexAttribArray (1);

glVertexAttribPointer(1,GL_BGRA,GL_UNSIGNED_INT_2_10_10_10_REV,GL_TRUE,0,test_data);

glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
Run Code Online (Sandbox Code Playgroud)

着色器是:顶点着色器 -

#version 150

in vec4 tk_position;
in vec4 color;

out vec4 v_color;

void main()
{
    v_color = color;
    gl_Position = tk_position; 
} …
Run Code Online (Sandbox Code Playgroud)

opengl glsl vertex-attributes

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