标签: opengl-4

OpenGL SuperBible第6版,头文件sb6.h缺失

最近我开始学习OpenGL和; 反过来,开始阅读使用OpenGL 4.3的OpenGL SuperBible第6版.

我的问题出现在sb6.h头文件中,因为在本书中写道,这是一个c ++头文件,它定义了一个名为sb6的命名空间,它包含了一个应用程序类的声明.

当我尝试编译我的程序时,我的C++ IDE(Visual Studio 2010)会抛出一个错误,指出无法找到这样的头文件.

所以也许你们其中一个人听说过这个问题,或者也开始阅读这本书并知道如何解决这个问题; 如果是的话请回复.

#include "sb6.h"

//derive my_application from sb6:application

class my_application : public sb6.application
{
public : 

   //Rendering function
   void render(double currentTime){

   //Simply clear the window red
   static const GLfloat red[] = {1.0f , 0.0f , 0.0f , 1.0f};

  glClearBufferfv(GL_COLOR, 0 , red) ; 
}
Run Code Online (Sandbox Code Playgroud)

c++ opengl opengl-4

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

在现代OpenGL中渲染大圆点

我想渲染围绕一组点的动态变化半径的实心圆,其2D坐标存储在VBO中.到目前为止,我使用的是GL_POINT_SMOOTH,但现在已转移到OpenGL 4.0,此选项不再可用.我在这里看到了类似的问题,但这并不适合我的需要,因为该示例中圆圈的中心在片段着色器中是硬编码的.我该怎么做?

目前,我的顶点着色器看起来像这样:

#version 400

layout(location=0) in vec2 in_Position;
layout(location=1) in vec4 in_Color;
out vec4 ex_Color;

uniform vec4 bounds;

void main(void){
    float x = -1+2/(bounds.y-bounds.x)*(in_Position.x-bounds.x);
    float y = -1+2/(bounds.w-bounds.z)*(in_Position.y-bounds.z);
    gl_Position = vec4(x,y,0,1);
    ex_Color = in_Color;
}
Run Code Online (Sandbox Code Playgroud)

我的片段着色器看起来像这样:

#version 400

in vec4 ex_Color;
out vec4 out_Color;

void main(void){
    out_Color = ex_Color;
}
Run Code Online (Sandbox Code Playgroud)

使用这些着色器,我得到了平方点.

opengl-4

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

将 RGBA32F 纹理作为 R32F 传递到着色器以进行 imageAtomic 操作和访问组件

是否可以将 3D RGBA32F 纹理作为与 imageAtomic 操作(即 R32F)兼容的类型传递给着色器,然后以某种方式修改 ivec3 索引,以便确定性地访问 RGBA32F 纹理的适当组件?

我知道这对于索引更直接的缓冲区是可能的,但 ivec3 似乎会阻止巧妙的索引操作。

opengl glsl opengl-4

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

OpenGL 4.2 glBindAttribLocation无效值?

我正在使用OpenGL 4.2,我无法弄清楚为什么我在这个程序中收到GL_INVALID_VALUE错误.当我调用glBindAttribLocation时出错.根据OpenGL 4参考页面,只有两个原因可以从glBindAttribLocation生成GL_INVALID_VALUE.

void glBindAttribLocation(GLuint program, GLuint index, const GLchar *name);

  1. 如果index等于或大于MAX_VERTEX_ATTRIBS,则生成INVALID_VALUE.
  2. 如果program不是OpenGL生成的值,则生成INVALID_VALUE.

正如你可以从下面的程序看,条件1不设置,因为indexIS 20GL_MAX_VERTEX_ATTRIBS34921.不满足条件2,因为program是由OpenGL使用生成的glCreateProgram().那我怎么可能得到一个GL_INVALID_VALUE错误?

// test.cpp
#include <GL/glew.h>
#include <GL/glut.h>
#include <iostream>

int main(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutCreateWindow("Test");
    glewInit();

    std::cout << "Max Vertex Attributes : " << GL_MAX_VERTEX_ATTRIBS << std::endl;
    // create program
    GLuint program = glCreateProgram();
    if ( program == 0 )
        std::cout << "Program error" << std::endl;

    // clear …
Run Code Online (Sandbox Code Playgroud)

c++ opengl shader opengl-4

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

使用 GL_TIME_ELAPSED 和 GL_TIMESTAMP 查询 OpenGL 中经过的时间有什么区别

它们都可以用来获取以纳秒为单位的流逝时间。前者使用作用域 glBeginQuery/glEndQuery。这就是区别吗?

opengl glsl opengl-4

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

OpenGL 顶点数组对象存储顶点缓冲区名称和索引,还是仅存储索引?

创建时,VAO 是否仅跟踪 VBO 索引(通过glBindVertexBuffer),或者还跟踪哪些 VBO 名称绑定到这些索引?如果我使用glVertexAttribBinding指定绑定索引,例如 0,我可以在绘制调用之前将不同的 VBO 绑定到索引 0 并让它使用该 VBO 的内容,还是始终使用任何 VBO创建 VAO 时是否绑定到索引 0?

我问这个问题是因为我发现很多例子都在调用glVertexAttribFormatglVertexAttribBinding之前调用glBindVertexBuffer,如果 VAO 仅跟踪索引(因为绑定索引在 中给出),则不需要调用glVertexAttribBinding

opengl vbo opengl-4 vao

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

对于制服和顶点属性,OpenGL 索引和位置是否相同?

在 OpenGL 参考页中,一些函数被标记为使用统一位置,而其他函数被标记为使用统一索引。这些是同一件事吗?

与顶点属性类似,一些函数被标记为使用顶点属性索引,而其他函数被标记为使用顶点属性位置。这些是一样的吗?

opengl opengl-es opengl-3 opengl-4 opengl-es-2.0

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

glBindBuffer和直接状态访问?

根据NVIDIA OpenGL 4.5 Update演示文稿的幻灯片23,以下内容如下:

非DSA:glGenBuffers + glBindBuffer

DSA:glCreateBuffers

我尝试过编写DSA程序.在使用glDrawArraysIndirect画,我被迫使用glBindBuffer沿glCreateBuffers


这是工作代码的片段:

glCreateBuffers(1, &bufObj);

glBindBuffer(GL_DRAW_INDIRECT_BUFFER, bufObj); //If deleted creates SEGFAULT crash

glNamedBufferData(bufObj, sizeof(mydrawcall), mydrawcall, GL_STATIC_DRAW);
...
glDrawArraysIndirect(GL_TRIANGLES, 0);
Run Code Online (Sandbox Code Playgroud)
  • glBindBuffer无DSA?
  • 我错过了另一个较新的DSA功能还是这是唯一的方法?

opengl opengl-4

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

如何查询 SSBO 结构的对齐/步幅?

我不确定哪种结构布局最适合我的应用程序:sharedpackedstd140std430。我并不是要对每一个进行解释,这些信息很容易找到,只是很难弄清楚每个对供应商兼容性/性能的影响。如果shared是默认值,我怀疑这是一个很好的起点。

据我所知,我必须在使用sharedor时查询对齐/偏移量packed,因为它是特定于实现的。

用于查询它的 API 是什么?glGetShaderiv在绑定计算着色器时,我是否传递了一些参数,让我找出对齐方式?

opengl shader glsl opengl-4 shader-storage-buffer

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

SSBO 绑定点索引可以是任意值吗?

当您在着色器中指定“location = x”以指定着色器存储或统一缓冲区绑定点时,该数字可以是任何值吗?该绑定点是否独立于当前绑定的着色器?

是否可以在绑定着色器之前绑定所有 ubos 和 ssbo,只要着色器使用的每种类型缓冲区的数量 <= OpenGL 允许同时在着色器中使用的最大数量?

我可以绑定 20 个缓冲区,然后通过在着色器中指定绑定点索引来指定着色器当前正在使用哪些缓冲区吗?

c++ opengl uniform opengl-4 ssbo

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