mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-12-16 15:31:30 +00:00
43 lines
No EOL
1.1 KiB
C++
43 lines
No EOL
1.1 KiB
C++
#ifndef __GL_SHADERPROGRAM_H
|
|
#define __GL_SHADERPROGRAM_H
|
|
|
|
#include "gl_shader.h"
|
|
|
|
class FShaderProgram
|
|
{
|
|
public:
|
|
FShaderProgram();
|
|
~FShaderProgram();
|
|
|
|
enum ShaderType
|
|
{
|
|
Vertex,
|
|
Fragment,
|
|
NumShaderTypes
|
|
};
|
|
|
|
void Compile(ShaderType type, const char *lumpName, const char *defines, int maxGlslVersion);
|
|
void Compile(ShaderType type, const char *name, const FString &code, const char *defines, int maxGlslVersion);
|
|
void SetFragDataLocation(int index, const char *name);
|
|
void Link(const char *name);
|
|
void SetAttribLocation(int index, const char *name);
|
|
void Bind();
|
|
|
|
operator GLuint() const { return mProgram; }
|
|
explicit operator bool() const { return mProgram != 0; }
|
|
|
|
private:
|
|
FShaderProgram(const FShaderProgram &) = delete;
|
|
FShaderProgram &operator=(const FShaderProgram &) = delete;
|
|
|
|
static FString PatchShader(ShaderType type, const FString &code, const char *defines, int maxGlslVersion);
|
|
|
|
void CreateShader(ShaderType type);
|
|
FString GetShaderInfoLog(GLuint handle);
|
|
FString GetProgramInfoLog(GLuint handle);
|
|
|
|
GLuint mProgram = 0;
|
|
GLuint mShaders[NumShaderTypes];
|
|
};
|
|
|
|
#endif |