着色器资源是渲染管线中必要的资源,在OpenGL中使用着色器对象和程序对象是密不可分的,GLShader类包含这些对象,来看一下它的定义:
namespace blender {
namespace gpu {
/**
* Implementation of shader compilation and uniforms handling using OpenGL.
*/
class GLShader : public Shader {
friend shader::ShaderCreateInfo;
friend shader::StageInterfaceInfo;
private:
/** Handle for full program (links shader stages below). */
GLuint shader_program_ = 0;
/** Individual shader stages. */
GLuint vert_shader_ = 0;
GLuint geom_shader_ = 0;
GLuint frag_shader_ = 0;
GLuint compute_shader_ = 0;
/** True if any shader failed to compile. */
bool compilation_failed_ = false;
eGPUShaderTFBType transform_feedback_type_ = GPU_SHADER_TFB_NONE;
public:
GLShader(const char *name);
~GLShader();
/** Return true on success. */
void vertex_shader_from_glsl(MutableSpan<const char *> sources) override;
void geometry_shader_from_glsl(MutableSpan<const char *> sources) override;
void fragment_shader_from_g

本文介绍了在BlenderGPU模块中,GLShader类如何处理OpenGL渲染管线中的着色器对象,包括编译、链接各个阶段(顶点、几何、片段、计算)的着色器,并利用MutableSpan高效处理着色器代码。
最低0.47元/天 解锁文章
1479

被折叠的 条评论
为什么被折叠?



