OpenGL:零活动制服
OpenGL: Zero active uniforms
>我指的是OpenGL超级圣经。我使用他们的框架来创建自己的程序。我想用接口块(特别是统一块(做一些事情。如果我打电话
glGetActiveUniformsiv(program, 1, uniformIndices, GL_UNIFORM_OFFSET, uniformOffsets);
我得到一个错误,即GL_INVALID_VALUE
. 但是,如果我用 0 而不是 1 调用相同的函数,它不会犯这个错误。那时我假设我没有现役制服。但是,我应该有其中的 3 个。 如何激活它们?这是我的着色器:
#version 450 core
layout (location = 0) in vec4 position;
layout (location = 1) in vec4 color;
out vec4 vs_color;
uniform TransformBlock {
mat4 translation;
mat4 rotation;
mat4 projection_matrix;
};
void main(void)
{
mat4 mvp = projection_matrix * translation * rotation ;
gl_Position = mvp * position;
vs_color = color;
}
下面是启动方法中的一些代码:
static const GLchar* uniformNames[3] = {
"TransformBlock.translation",
"TransformBlock.rotation",
"TransformBlock.projection_matrix",
};
GLuint uniformIndices[3];
glUseProgram(program);
glGetUniformIndices(program, 3, uniformNames, uniformIndices);
GLint uniformOffsets[3];
GLint matrixStrides[3];
glGetActiveUniformsiv(program, 3, uniformIndices, GL_UNIFORM_OFFSET, uniformOffsets);
glGetActiveUniformsiv(program, 3, uniformIndices, GL_UNIFORM_MATRIX_STRIDE, matrixStrides);
unsigned char* buffer1 = (unsigned char*)malloc(4096);
//fill buffer1 in a for-loop
GLuint block_index = glGetUniformBlockIndex(program, "TransformBlock");
glUniformBlockBinding(program, block_index, 0);
glBindBufferBase(GL_UNIFORM_BUFFER, 0, (GLuint)buffer1);
free(buffer1);
但是,由于函数返回GL_INVALID_VALUE
调用出错:
*((float *)(buffer1 + offset)) = ...
整个程序中断。如果不添加offset
,我在这里没有收到错误,所以我认为第二个错误取决于第一个错误。
我认为它在glGetUniformIndices
出错,因为您在制服名称前面加上了TransformBlock
。您也不会使用它来访问 GLSL 代码中带有该前缀的制服。如果你想要这个,你必须为制服块设置一个实例名称,块名称与访问/命名制服完全无关。仅当您将访问同一接口块的多个着色器链接在一起时,它才用于匹配接口。
相关文章:
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- "错误 (活动) E1696 无法打开源文件 "stdafx.h"--
- glBindTexture 是否覆盖活动纹理单元的内容
- 在使用 gSoap 链接多个 SOAP 服务时启用保持活动状态
- 使用动态编程以有限的资金选择活动
- CMake:Android Studio 原生活动项目无法在项目根目录之外找到第三方库
- 使用 IP 帮助程序的 Windows 中活动 UDP 连接的远程地址
- V8垃圾收集器回调,用于测量GC活动
- C++活动异常机制背后的推理
- 生成线程并在运行时执行其他操作,只要它处于活动状态
- 如何确定boost msm中的特定状态是否为活动状态
- 使用nvprof进行评测时没有GPU活动
- 通过TCP连接到Wi-Fi上的0.0.0.0,而侦听器PC有活动的Wi-Fi,以太网没有'不起作用
- C++ 递减和显示活动方程
- 如何在QT中为QInputDialog输入密码时设置背景非活动和灰色?
- OpenGL:零活动制服
- 使用不同参数匹配器的同一方法ON_CALL AND EXPECT_CALL会产生饱和和活动误差
- GCC (libstdc++) 运行时如何在异常处于活动状态时决定终止 ()
- 如何按z顺序获取第二个活动窗口?
- GLSL:链接后没有活动的制服/属性