shaders to 3d

This commit is contained in:
2023-06-03 16:35:17 +02:00
parent ca268781fd
commit 4e866c1032
5 changed files with 65 additions and 100 deletions

View File

@@ -3,27 +3,25 @@
namespace td {
namespace shader {
// TODO: GLES Shaders
#ifdef __ANDROID__
static const char vertexSource[] =
R"(#version 300 es
precision mediump float;
layout(location = 0) in vec2 position;
layout(location = 0) in vec3 position;
layout(location = 1) in int color;
uniform vec2 camPos;
uniform float zoom;
uniform float aspectRatio;
uniform float isometricView;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;
flat out int pass_color;
void main(void){
float x = (position.x - camPos.x - (position.y - camPos.y) * isometricView) / aspectRatio * zoom;
float y = ((0.5 * (position.x - camPos.x) + 0.5 * (position.y - camPos.y)) * isometricView + (position.y - camPos.y) * (1.0 - isometricView)) * zoom;
pass_color = color;
gl_Position = vec4(x, -y, 0.0, 1.0);
pass_color = color;
gl_Position = projectionMatrix * viewMatrix * vec4(position, 1.0);
}
)";
@@ -50,21 +48,17 @@ void main(void){
static const char vertexSource[] = R"(
#version 330
layout(location = 0) in vec2 position;
layout(location = 0) in vec3 position;
layout(location = 1) in int color;
uniform vec2 camPos;
uniform float zoom;
uniform float aspectRatio;
uniform float isometricView;
uniform mat4 viewMatrix;
uniform mat4 projectionMatrix;
flat out int pass_color;
void main(void){
float x = (position.x - camPos.x - (position.y - camPos.y) * isometricView) / aspectRatio * zoom;
float y = ((0.5 * (position.x - camPos.x) + 0.5 * (position.y - camPos.y)) * isometricView + (position.y - camPos.y) * (1.0 - isometricView)) * zoom;
pass_color = color;
gl_Position = vec4(x, -y, 0.0, 1.0);
pass_color = color;
gl_Position = projectionMatrix * viewMatrix * vec4(position, 1.0);
}
)";
@@ -94,23 +88,16 @@ void WorldShader::LoadShader() {
}
void WorldShader::GetAllUniformLocation() {
m_LocationAspectRatio = static_cast<unsigned int>(GetUniformLocation("aspectRatio"));
m_LocationZoom = static_cast<unsigned int>(GetUniformLocation("zoom"));
m_LocationCam = static_cast<unsigned int>(GetUniformLocation("camPos"));
m_LocationViewtype = static_cast<unsigned int>(GetUniformLocation("isometricView"));
m_LocationProjection = static_cast<unsigned int>(GetUniformLocation("projectionMatrix"));
m_LocationView = static_cast<unsigned int>(GetUniformLocation("viewMatrix"));
}
void WorldShader::SetCamPos(const Vec2f& camPos) {
LoadVector(m_LocationCam, camPos);
void WorldShader::SetProjectionMatrix(const maths::Mat4f& proj) const {
LoadMat4(m_LocationProjection, proj);
}
void WorldShader::SetZoom(float zoom) {
LoadFloat(m_LocationZoom, zoom);
}
void WorldShader::SetAspectRatio(float aspectRatio) {
LoadFloat(m_LocationAspectRatio, aspectRatio);
}
void WorldShader::SetIsometricView(float isometric) {
LoadFloat(m_LocationViewtype, isometric);
void WorldShader::SetViewMatrix(const maths::Mat4f& view) const {
LoadMat4(m_LocationView, view);
}
} // namespace shader