[add] Added TitleTextProgram.
This commit is contained in:
parent
309d5fff47
commit
e3e149f451
@ -6,13 +6,15 @@ import std.meta,
|
||||
|
||||
static import sjplayer = sjplayer.ProgramSet;
|
||||
|
||||
import sj.CubeProgram;
|
||||
import sj.CubeProgram,
|
||||
sj.TitleTextProgram;
|
||||
|
||||
///
|
||||
class ProgramSet {
|
||||
public:
|
||||
alias Programs = Tuple!(
|
||||
CubeProgram,
|
||||
TitleTextProgram,
|
||||
);
|
||||
|
||||
///
|
||||
|
97
src/sj/TitleTextProgram.d
Normal file
97
src/sj/TitleTextProgram.d
Normal file
@ -0,0 +1,97 @@
|
||||
/// License: MIT
|
||||
module sj.TitleTextProgram;
|
||||
|
||||
import gl4d;
|
||||
|
||||
///
|
||||
class TitleTextProgram {
|
||||
public:
|
||||
///
|
||||
static struct Vertex {
|
||||
public:
|
||||
///
|
||||
align(1) vec3 pos;
|
||||
///
|
||||
align(1) vec2 uv;
|
||||
}
|
||||
|
||||
///
|
||||
enum ShaderHeader = "#version 330 core
|
||||
#extension GL_ARB_explicit_uniform_location : enable";
|
||||
|
||||
///
|
||||
enum VertexShaderSrc = ShaderHeader ~ q{
|
||||
layout(location = 0) uniform mat4 P;
|
||||
layout(location = 1) uniform mat4 V;
|
||||
layout(location = 2) uniform mat4 M;
|
||||
|
||||
layout(location = 0) in vec3 vert;
|
||||
layout(location = 1) in vec2 uv;
|
||||
|
||||
out vec2 uv_;
|
||||
|
||||
void main() {
|
||||
uv_ = uv;
|
||||
gl_Position = P * V * M * vec4(vert, 1);
|
||||
}
|
||||
};
|
||||
///
|
||||
enum FragmentShaderSrc = ShaderHeader ~ q{
|
||||
layout(location = 3) uniform sampler2D tex;
|
||||
|
||||
in vec2 uv_;
|
||||
|
||||
out vec4 pixel_;
|
||||
|
||||
void main() {
|
||||
pixel_ = texture(tex, uv_);
|
||||
}
|
||||
};
|
||||
|
||||
///
|
||||
this() {
|
||||
ProgramLinker linker;
|
||||
linker.vertex = VertexShader.Compile(VertexShaderSrc);
|
||||
linker.fragment = FragmentShader.Compile(FragmentShaderSrc);
|
||||
program_ = linker.Link();
|
||||
program_.Validate();
|
||||
}
|
||||
|
||||
///
|
||||
void SetupVertexArray(ref VertexArrayRef vao, ref ArrayBufferRef vertices) {
|
||||
vao.Bind();
|
||||
VertexArrayAttacher attacher;
|
||||
with (attacher) {
|
||||
index = 0;
|
||||
type = GL_FLOAT;
|
||||
offset = 0;
|
||||
stride = Vertex.sizeof;
|
||||
dimension = 3;
|
||||
Attach(vao, vertices);
|
||||
|
||||
index = 1;
|
||||
type = GL_FLOAT;
|
||||
offset = vec3.sizeof;
|
||||
stride = Vertex.sizeof;
|
||||
dimension = 2;
|
||||
Attach(vao, vertices);
|
||||
}
|
||||
}
|
||||
|
||||
///
|
||||
void Use(
|
||||
mat4 proj, mat4 view, mat4 model,
|
||||
ref Texture2DRef tex, ref SamplerRef sampler) {
|
||||
tex.BindToUnit(GL_TEXTURE0);
|
||||
sampler.Bind(0);
|
||||
|
||||
program_.Use();
|
||||
program_.uniform!0 = proj;
|
||||
program_.uniform!1 = view;
|
||||
program_.uniform!2 = model;
|
||||
program_.uniform!3 = 0;
|
||||
}
|
||||
|
||||
private:
|
||||
ProgramRef program_;
|
||||
}
|
Reference in New Issue
Block a user