小编Chr*_*ard的帖子

GLSL制服仅由不相关的呼叫更新

我有一个非常基本的GLSL程序,在第一次绘制调用后无法正确更新统一值.未收到glGetError任何错误,编译和链接着色器时信息日志中未报告任何错误,并且所有统一位置均有效.

顶点着色器:

#version 120

uniform mat4 mvp;
uniform mat3 nmv;

attribute vec3 position;
attribute vec3 normal;

varying vec3 v_normal;

void main()
{
    v_normal = normalize(nmv * normal);
    gl_Position = mvp * vec4(position, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

片段着色器:

#version 120

uniform vec3 lightDir;
uniform vec3 lightColor;
uniform vec3 materialColor;

varying vec3 v_normal;

void main()
{
    vec3 n = normalize(v_normal);
    float nDotL = max(0.0, dot(n, lightDir));

    gl_FragColor = vec4(materialColor * lightColor * nDotL, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

渲染代码:

glUseProgram(program);
glUniformMatrix4fv(mvpLoc, 1, GL_FALSE, mvp);
glUniformMatrix3fv(nmvLoc, …
Run Code Online (Sandbox Code Playgroud)

opengl glsl

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

无法从另一个模板类调用模板类的模板成员函数

尝试从另一个模板类中访问模板类的模板成员函数时,我遇到编译器错误.函数调用getSubmatrix导致编译器警告,"表达式结果未使用",关于参数(0, 0),最终失败,编译器错误"必须调用非静态成员函数的引用".

矩阵类:

template <std::size_t m, std::size_t n, typename T, std::size_t rowPadding = 0>
class Matrix
{
public:
    ...

    template <std::size_t p, std::size_t q>
    Matrix<p, q, T, n - q>& getSubmatrix(std::size_t column, std::size_t row)
    {
        ...
    }
};
Run Code Online (Sandbox Code Playgroud)

变换类:

template <typename T>
class Transform
{
public:
    ...

    Matrix<4, 4, T> matrix() const
    {
        ...

        Matrix<4, 4, T> result;
        result.getSubmatrix<3, 3>(0, 0) = Matrix<3, 3, T>();

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

请注意,将矩阵类型更改为Matrix<4, 4, float>而不是Matrix<4, 4, T> …

c++ templates

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

标签 统计

c++ ×1

glsl ×1

opengl ×1

templates ×1