add checkerboard shader and draw it
This commit is contained in:
@@ -240,6 +240,28 @@ void App::initShaders()
|
|||||||
" frag = vec4(rgb, alpha_tot);\n"
|
" frag = vec4(rgb, alpha_tot);\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
|
static const char* shader_checkerboard_v =
|
||||||
|
SHADER_VERSION
|
||||||
|
"uniform mat4 mvp;\n"
|
||||||
|
"in vec4 pos;\n"
|
||||||
|
"in vec2 uvs;\n"
|
||||||
|
"out vec2 uv;\n"
|
||||||
|
"void main(){\n"
|
||||||
|
" uv = uvs;\n"
|
||||||
|
" gl_Position = mvp * vec4(pos.xyz, 1.0);\n"
|
||||||
|
"}";
|
||||||
|
static const char* shader_checkerboard_f =
|
||||||
|
SHADER_VERSION
|
||||||
|
"in mediump vec2 uv;\n"
|
||||||
|
"out mediump vec4 frag;\n"
|
||||||
|
"void main(){\n"
|
||||||
|
" const vec4 c1 = vec4(1.0, 1.0, 1.0, 1.0);\n"
|
||||||
|
" const vec4 c2 = vec4(0.9, 0.9, 0.9, 1.0);\n"
|
||||||
|
" vec2 c = floor(fract(uv * 10.0) * 2.0);\n"
|
||||||
|
" float alpha = mix(c.x, 1.0 - c.x, c.y);\n"
|
||||||
|
" frag = mix(c1, c2, alpha);\n"
|
||||||
|
"}";
|
||||||
|
|
||||||
LOG("initializing shaders");
|
LOG("initializing shaders");
|
||||||
if (!ShaderManager::create(kShader::Texture, shader_v, shader_f))
|
if (!ShaderManager::create(kShader::Texture, shader_v, shader_f))
|
||||||
LOG("Failed to create shader Texture");
|
LOG("Failed to create shader Texture");
|
||||||
@@ -263,6 +285,8 @@ void App::initShaders()
|
|||||||
LOG("Failed to create shader StrokeErase");
|
LOG("Failed to create shader StrokeErase");
|
||||||
if (!ShaderManager::create(kShader::StrokeLayer, shader_stroke_layer_v, shader_stroke_layer_f))
|
if (!ShaderManager::create(kShader::StrokeLayer, shader_stroke_layer_v, shader_stroke_layer_f))
|
||||||
LOG("Failed to create shader StrokeLayer");
|
LOG("Failed to create shader StrokeLayer");
|
||||||
|
if (!ShaderManager::create(kShader::Checkerboard, shader_checkerboard_v, shader_checkerboard_f))
|
||||||
|
LOG("Failed to create shader Checkerboard");
|
||||||
LOG("shaders initialized");
|
LOG("shaders initialized");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1932,19 +1932,24 @@ public:
|
|||||||
// auto plane_mvp = proj * camera * transform *
|
// auto plane_mvp = proj * camera * transform *
|
||||||
// glm::scale(glm::vec3(sz, 1));
|
// glm::scale(glm::vec3(sz, 1));
|
||||||
|
|
||||||
|
|
||||||
m_sampler.bind(0);
|
m_sampler.bind(0);
|
||||||
ui::ShaderManager::use(kShader::TextureAlpha);
|
|
||||||
ui::ShaderManager::u_int(kShaderUniform::Tex, 0);
|
|
||||||
|
|
||||||
auto blend = glIsEnabled(GL_BLEND);
|
auto blend = glIsEnabled(GL_BLEND);
|
||||||
|
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
for (auto layer_index : m_canvas->m_order)
|
for (int plane_index = 0; plane_index < 6; plane_index++)
|
||||||
{
|
{
|
||||||
for (int plane_index = 0; plane_index < 6; plane_index++)
|
auto plane_mvp = proj * camera * m_canvas->m_plane_transform[plane_index] * glm::translate(glm::vec3(0, 0, -1));
|
||||||
|
|
||||||
|
ui::ShaderManager::use(kShader::Checkerboard);
|
||||||
|
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp);
|
||||||
|
m_face_plane.draw_fill();
|
||||||
|
|
||||||
|
ui::ShaderManager::use(kShader::TextureAlpha);
|
||||||
|
ui::ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||||
|
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp);
|
||||||
|
for (auto layer_index : m_canvas->m_order)
|
||||||
{
|
{
|
||||||
auto plane_mvp = proj * camera * m_canvas->m_plane_transform[plane_index] * glm::translate(glm::vec3(0, 0, -1));
|
|
||||||
ui::ShaderManager::u_mat4(kShaderUniform::MVP, plane_mvp);
|
|
||||||
if (!(m_canvas->m_erase && m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index))
|
if (!(m_canvas->m_erase && m_canvas->m_show_tmp && m_canvas->m_current_layer_idx == layer_index))
|
||||||
{
|
{
|
||||||
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_canvas->m_layers[layer_index].m_opacity);
|
ui::ShaderManager::u_float(kShaderUniform::Alpha, m_canvas->m_layers[layer_index].m_opacity);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ enum class kShader : uint16_t
|
|||||||
Stroke = const_hash("stroke"),
|
Stroke = const_hash("stroke"),
|
||||||
StrokeErase = const_hash("stroke-erase"),
|
StrokeErase = const_hash("stroke-erase"),
|
||||||
StrokeLayer = const_hash("stroke-layer"),
|
StrokeLayer = const_hash("stroke-layer"),
|
||||||
|
Checkerboard= const_hash("checkerboard"),
|
||||||
};
|
};
|
||||||
|
|
||||||
class Shader
|
class Shader
|
||||||
|
|||||||
Reference in New Issue
Block a user