#include "pch.h" #include "app.h" #include "shader.h" void App::initShaders() { #ifdef _DEBUG if (!check_uniform_uniqueness()) std::logic_error("check_uniform_uniqueness() failed"); #endif // _DEBUG render_task([] { GLint n_exts; glGetIntegerv(GL_NUM_EXTENSIONS, &n_exts); for (int i = 0; i < n_exts; i++) { std::string ext = (const char*)glGetStringi(GL_EXTENSIONS, i); if (ext.find("shader_framebuffer_fetch") != std::string::npos) ShaderManager::ext_framebuffer_fetch = true; #if __GLES__ && !__WEB__ if (ext.find("texture_float") != std::string::npos) ShaderManager::ext_float32 = true; if (ext.find("texture_float_linear") != std::string::npos) ShaderManager::ext_float32_linear = true; if (ext.find("color_buffer_float") != std::string::npos) ShaderManager::ext_float32 = true; if (ext.find("texture_half_float") != std::string::npos) ShaderManager::ext_float16 = true; if (ext.find("color_buffer_half_float") != std::string::npos) ShaderManager::ext_float16 = true; #endif LOG("EXT: %s", ext.c_str()); } }); #if __GL__ // In OpenGL 3.3 these should be already available ShaderManager::ext_float32_linear = true; ShaderManager::ext_float32 = true; ShaderManager::ext_float16 = true; #endif LOG("Shader Extension shader_framebuffer_fetch: %s", ShaderManager::ext_framebuffer_fetch ? "enabled" : "disabled"); LOG("initializing shaders"); if (!ShaderManager::load(kShader::Texture, "data/shaders/texture.glsl")) LOG("Failed to create shader Texture"); if (!ShaderManager::load(kShader::TextureAlpha, "data/shaders/texture-alpha.glsl")) LOG("Failed to create shader TextureAlpha"); if (!ShaderManager::load(kShader::TextureMask, "data/shaders/texture-mask.glsl")) LOG("Failed to create shader TextureMask"); if (!ShaderManager::load(kShader::TextureColorize, "data/shaders/texture-colorize.glsl")) LOG("Failed to create shader TextureColorize"); if (!ShaderManager::load(kShader::TextureBlend, "data/shaders/texture-blend.glsl")) LOG("Failed to create shader TextureBlend"); if (!ShaderManager::load(kShader::StrokePreview, "data/shaders/stroke-preview.glsl")) LOG("Failed to create shader StrokePreview"); if (!ShaderManager::load(kShader::CompErase, "data/shaders/comp-erase.glsl")) LOG("Failed to create shader CompErase"); if (!ShaderManager::load(kShader::CompDraw, "data/shaders/comp-draw.glsl")) LOG("Failed to create shader CompDraw"); if (!ShaderManager::load(kShader::Color, "data/shaders/color.glsl")) LOG("Failed to create shader Color"); if (!ShaderManager::load(kShader::ColorQuad, "data/shaders/color-quad.glsl")) LOG("Failed to create shader ColorQuad"); if (!ShaderManager::load(kShader::ColorTri, "data/shaders/color-tri.glsl")) LOG("Failed to create shader ColorTri"); if (!ShaderManager::load(kShader::ColorHue, "data/shaders/color-hue.glsl")) LOG("Failed to create shader ColorHue"); if (!ShaderManager::load(kShader::UVs, "data/shaders/uvs.glsl")) LOG("Failed to create shader UVs"); if (!ShaderManager::load(kShader::Font, "data/shaders/font.glsl")) LOG("Failed to create shader Font"); if (!ShaderManager::load(kShader::Atlas, "data/shaders/atlas.glsl")) LOG("Failed to create shader Atlas"); if (!ShaderManager::load(kShader::Stroke, "data/shaders/stroke.glsl")) LOG("Failed to create shader Stroke"); if (!ShaderManager::load(kShader::StrokePad, "data/shaders/stroke-pad.glsl")) LOG("Failed to create shader StrokePad"); if (!ShaderManager::load(kShader::StrokeDilate, "data/shaders/stroke-dilate.glsl")) LOG("Failed to create shader StrokeDilate"); if (!ShaderManager::load(kShader::Checkerboard, "data/shaders/checkerboard.glsl")) LOG("Failed to create shader Checkerboard"); if (!ShaderManager::load(kShader::Equirect, "data/shaders/equirect.glsl")) LOG("Failed to create shader Equirect"); if (!ShaderManager::load(kShader::BrushStroke, "data/shaders/stroke-instanced.glsl")) LOG("Failed to create shader BrushStroke"); if (!ShaderManager::load(kShader::VertexColor, "data/shaders/vertex-color.glsl")) LOG("Failed to create shader VertexColor"); if (!ShaderManager::load(kShader::Lambert, "data/shaders/lambert.glsl")) LOG("Failed to create shader Lambert"); if (!ShaderManager::load(kShader::LambertLightmap, "data/shaders/lightmap.glsl")) LOG("Failed to create shader LambertLightmap"); if (!ShaderManager::load(kShader::BakeUV, "data/shaders/bake-uv.glsl")) LOG("Failed to create shader BakeUV"); LOG("shaders initialized"); }