From 0d97856bf6974450a8e72816be7bf271af04a458 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Tue, 25 Oct 2022 16:41:21 +0200 Subject: rename shader --- shaders/tile-shader.cpp | 63 --------------------------------------------- shaders/tile-shader.frag | 11 -------- shaders/tile-shader.hpp | 66 ------------------------------------------------ shaders/tile-shader.vert | 15 ----------- shaders/tile.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++++ shaders/tile.frag | 11 ++++++++ shaders/tile.hpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ shaders/tile.vert | 15 +++++++++++ 8 files changed, 155 insertions(+), 155 deletions(-) delete mode 100644 shaders/tile-shader.cpp delete mode 100644 shaders/tile-shader.frag delete mode 100644 shaders/tile-shader.hpp delete mode 100644 shaders/tile-shader.vert create mode 100644 shaders/tile.cpp create mode 100644 shaders/tile.frag create mode 100644 shaders/tile.hpp create mode 100644 shaders/tile.vert (limited to 'shaders') diff --git a/shaders/tile-shader.cpp b/shaders/tile-shader.cpp deleted file mode 100644 index 50444cc8..00000000 --- a/shaders/tile-shader.cpp +++ /dev/null @@ -1,63 +0,0 @@ -#include "shaders/tile-shader.hpp" -#include "loader.hpp" -#include "compat/assert.hpp" -#include -#include -#include -#include - -namespace floormat { - -tile_shader::tile_shader() -{ - MAGNUM_ASSERT_GL_VERSION_SUPPORTED(GL::Version::GL460); - - GL::Shader vert{GL::Version::GL460, GL::Shader::Type::Vertex}; - GL::Shader frag{GL::Version::GL460, GL::Shader::Type::Fragment}; - - vert.addSource(loader.shader("shaders/tile-shader.vert")); - frag.addSource(loader.shader("shaders/tile-shader.frag")); - CORRADE_INTERNAL_ASSERT_OUTPUT(vert.compile()); - CORRADE_INTERNAL_ASSERT_OUTPUT(frag.compile()); - attachShaders({vert, frag}); - CORRADE_INTERNAL_ASSERT_OUTPUT(link()); - - set_scale({640, 480}); - set_camera_offset({0, 0}); - set_tint({1, 1, 1, 1}); -} - -tile_shader::~tile_shader() = default; - -tile_shader& tile_shader::set_scale(const Vector2& scale) -{ - if (scale != _scale) - setUniform(ScaleUniform, _scale = scale); - return *this; -} - -tile_shader& tile_shader::set_camera_offset(Vector2d camera_offset) -{ - _camera_offset = camera_offset; - return *this; -} - -tile_shader& tile_shader::set_tint(const Vector4& tint) -{ - if (tint != _tint) - setUniform(TintUniform, _tint = tint); - return *this; -} - -void tile_shader::_draw() -{ - if (const auto offset = Vector2{(float)_camera_offset[0], (float)_camera_offset[1]}; - offset != _real_camera_offset) - { - fm_assert(offset[0] < 1 << 24 && offset[1] < 1 << 24); - _real_camera_offset = offset; - setUniform(OffsetUniform, offset); - } -} - -} // namespace floormat diff --git a/shaders/tile-shader.frag b/shaders/tile-shader.frag deleted file mode 100644 index 5c070ebe..00000000 --- a/shaders/tile-shader.frag +++ /dev/null @@ -1,11 +0,0 @@ -precision highp float; - -uniform sampler2D sampler; -layout (location = 2) uniform vec4 tint = vec4(1, 1, 1, 1); - -noperspective in vec2 frag_texcoords; -out vec4 color; - -void main() { - color = vec4(texture(sampler, frag_texcoords).rgb, 1) * tint; -} diff --git a/shaders/tile-shader.hpp b/shaders/tile-shader.hpp deleted file mode 100644 index bbe57e52..00000000 --- a/shaders/tile-shader.hpp +++ /dev/null @@ -1,66 +0,0 @@ -#pragma once -#include "compat/defs.hpp" -#include -#include -#include -#include - -namespace floormat { - -struct tile_shader : GL::AbstractShaderProgram -{ - typedef GL::Attribute<0, Vector3> Position; - typedef GL::Attribute<1, Vector2> TextureCoordinates; - - fm_DECLARE_DEFAULT_MOVE_ASSIGNMENT_(tile_shader); - fm_DECLARE_DELETED_COPY_ASSIGNMENT(tile_shader); - - explicit tile_shader(); - ~tile_shader() override; - - Vector2 scale() const { return _scale; } - tile_shader& set_scale(const Vector2& scale); - Vector2d camera_offset() const { return _camera_offset; } - tile_shader& set_camera_offset(Vector2d camera_offset); - Vector4 tint() const { return _tint; } - tile_shader& set_tint(const Vector4& tint); - - static constexpr Vector2d project(Vector3d pt); - static constexpr Vector2d unproject(Vector2d px); - - template - auto draw(T&& mesh, Xs&&... xs) -> - decltype(GL::AbstractShaderProgram::draw(std::forward(mesh), std::forward(xs)...)); - -private: - void _draw(); - - Vector2d _camera_offset; - Vector4 _tint; - Vector2 _scale; - Vector2 _real_camera_offset; - - enum { ScaleUniform = 0, OffsetUniform = 1, TintUniform = 2, }; -}; - -template -auto tile_shader::draw(T&& mesh, Xs&&... xs) -> - decltype(GL::AbstractShaderProgram::draw(std::forward(mesh), std::forward(xs)...)) -{ - _draw(); - return GL::AbstractShaderProgram::draw(std::forward(mesh), std::forward(xs)...); -} - -constexpr Vector2d tile_shader::project(const Vector3d pt) -{ - const auto x = pt[0], y = pt[1], z = pt[2]; - return { (x-y), (x+y+z*2)*.59 }; -} - -constexpr Vector2d tile_shader::unproject(const Vector2d px) -{ - const auto X = px[0], Y = px[1]; - return { X + 100 * Y / 59, 100 * Y / 59 - X }; -} - -} // namespace floormat diff --git a/shaders/tile-shader.vert b/shaders/tile-shader.vert deleted file mode 100644 index 8b3f2dba..00000000 --- a/shaders/tile-shader.vert +++ /dev/null @@ -1,15 +0,0 @@ -precision highp float; - -layout (location = 0) uniform vec2 scale; -layout (location = 1) uniform vec2 offset; - -layout (location = 0) in vec4 position; -layout (location = 1) in vec2 texcoords; -noperspective out vec2 frag_texcoords; - -void main() { - float cx = 1/scale.x, cy = 1/scale.y; - float x = -position.y, y = -position.x, z = position.z; - gl_Position = vec4((x-y+offset.x)*cx, (x+y+z*2)*cy*.59-offset.y*cy, 0, 1); - frag_texcoords = texcoords; -} diff --git a/shaders/tile.cpp b/shaders/tile.cpp new file mode 100644 index 00000000..2a7f50f1 --- /dev/null +++ b/shaders/tile.cpp @@ -0,0 +1,63 @@ +#include "shaders/tile.hpp" +#include "loader.hpp" +#include "compat/assert.hpp" +#include +#include +#include +#include + +namespace floormat { + +tile_shader::tile_shader() +{ + MAGNUM_ASSERT_GL_VERSION_SUPPORTED(GL::Version::GL460); + + GL::Shader vert{GL::Version::GL460, GL::Shader::Type::Vertex}; + GL::Shader frag{GL::Version::GL460, GL::Shader::Type::Fragment}; + + vert.addSource(loader.shader("shaders/tile.vert")); + frag.addSource(loader.shader("shaders/tile.frag")); + CORRADE_INTERNAL_ASSERT_OUTPUT(vert.compile()); + CORRADE_INTERNAL_ASSERT_OUTPUT(frag.compile()); + attachShaders({vert, frag}); + CORRADE_INTERNAL_ASSERT_OUTPUT(link()); + + set_scale({640, 480}); + set_camera_offset({0, 0}); + set_tint({1, 1, 1, 1}); +} + +tile_shader::~tile_shader() = default; + +tile_shader& tile_shader::set_scale(const Vector2& scale) +{ + if (scale != _scale) + setUniform(ScaleUniform, _scale = scale); + return *this; +} + +tile_shader& tile_shader::set_camera_offset(Vector2d camera_offset) +{ + _camera_offset = camera_offset; + return *this; +} + +tile_shader& tile_shader::set_tint(const Vector4& tint) +{ + if (tint != _tint) + setUniform(TintUniform, _tint = tint); + return *this; +} + +void tile_shader::_draw() +{ + if (const auto offset = Vector2{(float)_camera_offset[0], (float)_camera_offset[1]}; + offset != _real_camera_offset) + { + fm_assert(offset[0] < 1 << 24 && offset[1] < 1 << 24); + _real_camera_offset = offset; + setUniform(OffsetUniform, offset); + } +} + +} // namespace floormat diff --git a/shaders/tile.frag b/shaders/tile.frag new file mode 100644 index 00000000..5c070ebe --- /dev/null +++ b/shaders/tile.frag @@ -0,0 +1,11 @@ +precision highp float; + +uniform sampler2D sampler; +layout (location = 2) uniform vec4 tint = vec4(1, 1, 1, 1); + +noperspective in vec2 frag_texcoords; +out vec4 color; + +void main() { + color = vec4(texture(sampler, frag_texcoords).rgb, 1) * tint; +} diff --git a/shaders/tile.hpp b/shaders/tile.hpp new file mode 100644 index 00000000..bbe57e52 --- /dev/null +++ b/shaders/tile.hpp @@ -0,0 +1,66 @@ +#pragma once +#include "compat/defs.hpp" +#include +#include +#include +#include + +namespace floormat { + +struct tile_shader : GL::AbstractShaderProgram +{ + typedef GL::Attribute<0, Vector3> Position; + typedef GL::Attribute<1, Vector2> TextureCoordinates; + + fm_DECLARE_DEFAULT_MOVE_ASSIGNMENT_(tile_shader); + fm_DECLARE_DELETED_COPY_ASSIGNMENT(tile_shader); + + explicit tile_shader(); + ~tile_shader() override; + + Vector2 scale() const { return _scale; } + tile_shader& set_scale(const Vector2& scale); + Vector2d camera_offset() const { return _camera_offset; } + tile_shader& set_camera_offset(Vector2d camera_offset); + Vector4 tint() const { return _tint; } + tile_shader& set_tint(const Vector4& tint); + + static constexpr Vector2d project(Vector3d pt); + static constexpr Vector2d unproject(Vector2d px); + + template + auto draw(T&& mesh, Xs&&... xs) -> + decltype(GL::AbstractShaderProgram::draw(std::forward(mesh), std::forward(xs)...)); + +private: + void _draw(); + + Vector2d _camera_offset; + Vector4 _tint; + Vector2 _scale; + Vector2 _real_camera_offset; + + enum { ScaleUniform = 0, OffsetUniform = 1, TintUniform = 2, }; +}; + +template +auto tile_shader::draw(T&& mesh, Xs&&... xs) -> + decltype(GL::AbstractShaderProgram::draw(std::forward(mesh), std::forward(xs)...)) +{ + _draw(); + return GL::AbstractShaderProgram::draw(std::forward(mesh), std::forward(xs)...); +} + +constexpr Vector2d tile_shader::project(const Vector3d pt) +{ + const auto x = pt[0], y = pt[1], z = pt[2]; + return { (x-y), (x+y+z*2)*.59 }; +} + +constexpr Vector2d tile_shader::unproject(const Vector2d px) +{ + const auto X = px[0], Y = px[1]; + return { X + 100 * Y / 59, 100 * Y / 59 - X }; +} + +} // namespace floormat diff --git a/shaders/tile.vert b/shaders/tile.vert new file mode 100644 index 00000000..8b3f2dba --- /dev/null +++ b/shaders/tile.vert @@ -0,0 +1,15 @@ +precision highp float; + +layout (location = 0) uniform vec2 scale; +layout (location = 1) uniform vec2 offset; + +layout (location = 0) in vec4 position; +layout (location = 1) in vec2 texcoords; +noperspective out vec2 frag_texcoords; + +void main() { + float cx = 1/scale.x, cy = 1/scale.y; + float x = -position.y, y = -position.x, z = position.z; + gl_Position = vec4((x-y+offset.x)*cx, (x+y+z*2)*cy*.59-offset.y*cy, 0, 1); + frag_texcoords = texcoords; +} -- cgit v1.2.3