gpt4 book ai didi

c++ - 在glsl中初始化全局变量?

转载 作者:行者123 更新时间:2023-12-02 10:16:30 30 4
gpt4 key购买 nike

在我的设置中可以正常工作,但要确定。
使用glsl 430,我在我的几何着色器中有这个

#version 430
layout (points) in;
layout (triangle_strip) out;
layout (max_vertices = 24) out;

uniform mat4 u_projMatrix;
uniform mat4 u_viewMatrix;

mat4 viewProjection = u_projMatrix * u_viewMatrix;

void someFunction1(){
// uses viewProjection
}

void someFunction2(){
// uses viewProjection
}

void main()
{
// uses viewProjection
}

我关心的是 viewProjection,我希望 viewProjectionmain()之前初始化。我仔细阅读了glsl手册,看起来它可以做到这一点,并且应该可以正常编译。如果代码无效,有人可以向我介绍规范中的内容,谢谢

最佳答案

是的,此代码在技术上没问题。该规范允许您使用任意表达式来初始化全局变量,即使是使用uniform的表达式等。本质上,它们将在main开始之前执行。

但您实际上不应使用此功能。

首先,这种事情在着色器代码中很少见。因此,不太可能针对OpenGL实现正确的测试。这意味着实现更有可能以某种方式使此代码出错。只用main编写代码更加安全。

其次,您隐藏了着色器的成本。如果您的初始化不是常量表达式,那么它们实际上将花费执行时间。但是您不会在main或任何函数main调用中看到它。它会以您通常认为的“代码”之外的形式存在。但是它仍然会降低性能。

关于c++ - 在glsl中初始化全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61765147/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com