mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-12-23 06:11:46 +00:00
[client] egl: implement #include for shaders with awk
This commit is contained in:
parent
4eda01949d
commit
9b1d03fcfe
6 changed files with 95 additions and 81 deletions
|
@ -5,23 +5,24 @@ function(make_object out_var)
|
||||||
file(RELATIVE_PATH out_f ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/${in_f}")
|
file(RELATIVE_PATH out_f ${CMAKE_CURRENT_SOURCE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/${in_f}")
|
||||||
set(out_h "${CMAKE_CURRENT_BINARY_DIR}/${out_f}.h")
|
set(out_h "${CMAKE_CURRENT_BINARY_DIR}/${out_f}.h")
|
||||||
set(out_f "${CMAKE_CURRENT_BINARY_DIR}/${out_f}.o")
|
set(out_f "${CMAKE_CURRENT_BINARY_DIR}/${out_f}.o")
|
||||||
string(REGEX REPLACE "[/.]" "_" sym_in ${in_f})
|
string(REGEX REPLACE "[/.]" "_" sym_in "${CMAKE_CURRENT_SOURCE_DIR}/${in_f}")
|
||||||
|
string(REGEX REPLACE "[/.]" "_" sym_out "${in_f}")
|
||||||
|
|
||||||
add_custom_command(OUTPUT ${out_f}
|
add_custom_command(OUTPUT ${out_f}
|
||||||
COMMAND ${CMAKE_LINKER} -r -b binary -o ${out_f} ${in_f}
|
COMMAND ${CMAKE_LINKER} -r -b binary -o ${out_f} "${CMAKE_CURRENT_SOURCE_DIR}/${in_f}"
|
||||||
COMMAND ${CMAKE_OBJCOPY} --rename-section .data=.rodata,CONTENTS,ALLOC,LOAD,READONLY,DATA ${out_f} ${out_f}
|
COMMAND ${CMAKE_OBJCOPY} --rename-section .data=.rodata,CONTENTS,ALLOC,LOAD,READONLY,DATA ${out_f} ${out_f}
|
||||||
COMMAND ${CMAKE_OBJCOPY} --redefine-sym _binary_${sym_in}_start=b_${sym_in} ${out_f} ${out_f}
|
COMMAND ${CMAKE_OBJCOPY} --redefine-sym _binary_${sym_in}_start=b_${sym_out} ${out_f} ${out_f}
|
||||||
COMMAND ${CMAKE_OBJCOPY} --redefine-sym _binary_${sym_in}_end=b_${sym_in}_end ${out_f} ${out_f}
|
COMMAND ${CMAKE_OBJCOPY} --redefine-sym _binary_${sym_in}_end=b_${sym_out}_end ${out_f} ${out_f}
|
||||||
COMMAND ${CMAKE_OBJCOPY} --strip-symbol _binary_${sym_in}_size ${out_f} ${out_f}
|
COMMAND ${CMAKE_OBJCOPY} --strip-symbol _binary_${sym_in}_size ${out_f} ${out_f}
|
||||||
DEPENDS ${in_f}
|
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${in_f}"
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
COMMENT "Creating object from ${in_f}"
|
COMMENT "Creating object from ${in_f}"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
|
|
||||||
file(WRITE ${out_h} "extern const char b_${sym_in}[];\n")
|
file(WRITE ${out_h} "extern const char b_${sym_out}[];\n")
|
||||||
file(APPEND ${out_h} "extern const char b_${sym_in}_end[];\n")
|
file(APPEND ${out_h} "extern const char b_${sym_out}_end[];\n")
|
||||||
file(APPEND ${out_h} "#define b_${sym_in}_size (b_${sym_in}_end - b_${sym_in})\n")
|
file(APPEND ${out_h} "#define b_${sym_out}_size (b_${sym_out}_end - b_${sym_out})\n")
|
||||||
|
|
||||||
get_filename_component(h_dir ${out_h} DIRECTORY)
|
get_filename_component(h_dir ${out_h} DIRECTORY)
|
||||||
list(APPEND result_h ${h_dir})
|
list(APPEND result_h ${h_dir})
|
||||||
|
|
|
@ -12,8 +12,35 @@ pkg_check_modules(RENDERER_EGL_OPT IMPORTED_TARGET
|
||||||
)
|
)
|
||||||
|
|
||||||
include(MakeObject)
|
include(MakeObject)
|
||||||
make_object(
|
function(build_shaders header_dir)
|
||||||
EGL_SHADER
|
file(GLOB headers "${header_dir}/*.h")
|
||||||
|
message("${headers}")
|
||||||
|
set(EGL_SHADER_PROCESSED)
|
||||||
|
foreach(shader ${ARGN})
|
||||||
|
set(out_f "${CMAKE_CURRENT_BINARY_DIR}/${shader}")
|
||||||
|
add_custom_command(OUTPUT "${out_f}"
|
||||||
|
COMMAND awk -f "${CMAKE_CURRENT_SOURCE_DIR}/glsl.include.awk"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/${shader}" > "${out_f}"
|
||||||
|
MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/${shader}"
|
||||||
|
DEPENDS ${headers}
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/shader"
|
||||||
|
COMMENT "Preprocessing shader ${shader}"
|
||||||
|
VERBATIM
|
||||||
|
)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set(CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
make_object(
|
||||||
|
EGL_SHADER
|
||||||
|
${ARGN}
|
||||||
|
)
|
||||||
|
|
||||||
|
set(EGL_SHADER_OBJS "${EGL_SHADER_OBJS}" PARENT_SCOPE)
|
||||||
|
set(EGL_SHADER_INCS "${EGL_SHADER_INCS}" PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
build_shaders(
|
||||||
|
shader
|
||||||
shader/desktop.vert
|
shader/desktop.vert
|
||||||
shader/desktop_rgb.frag
|
shader/desktop_rgb.frag
|
||||||
shader/cursor.vert
|
shader/cursor.vert
|
||||||
|
@ -49,7 +76,7 @@ add_library(renderer_EGL STATIC
|
||||||
splash.c
|
splash.c
|
||||||
damage.c
|
damage.c
|
||||||
${EGL_SHADER_OBJS}
|
${EGL_SHADER_OBJS}
|
||||||
"${EGL_SHADER_INCS}/desktop_rgb.def.h"
|
"${CMAKE_CURRENT_BINARY_DIR}/shader/desktop_rgb.def.h"
|
||||||
${PROJECT_TOP}/repos/cimgui/imgui/backends/imgui_impl_opengl3.cpp
|
${PROJECT_TOP}/repos/cimgui/imgui/backends/imgui_impl_opengl3.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
13
client/renderers/EGL/glsl.include.awk
Normal file
13
client/renderers/EGL/glsl.include.awk
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
BEGIN { FS="\"" }
|
||||||
|
|
||||||
|
function process(line, second) {
|
||||||
|
if (line ~ /^#include[ \t]*".+"[ \t]*$/) {
|
||||||
|
while (getline < second) {
|
||||||
|
process($0, $2)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print line
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{ process($0, $2) }
|
37
client/renderers/EGL/shader/color_blind.h
Normal file
37
client/renderers/EGL/shader/color_blind.h
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
highp vec4 cbTransform(highp vec4 color, int cbMode)
|
||||||
|
{
|
||||||
|
highp float L = (17.8824000 * color.r) + (43.516100 * color.g) + (4.11935 * color.b);
|
||||||
|
highp float M = (03.4556500 * color.r) + (27.155400 * color.g) + (3.86714 * color.b);
|
||||||
|
highp float S = (00.0299566 * color.r) + (00.184309 * color.g) + (1.46709 * color.b);
|
||||||
|
highp float l, m, s;
|
||||||
|
|
||||||
|
if (cbMode == 1) // Protanope
|
||||||
|
{
|
||||||
|
l = 0.0f * L + 2.02344f * M + -2.52581f * S;
|
||||||
|
m = 0.0f * L + 1.0f * M + 0.0f * S;
|
||||||
|
s = 0.0f * L + 0.0f * M + 1.0f * S;
|
||||||
|
}
|
||||||
|
else if (cbMode == 2) // Deuteranope
|
||||||
|
{
|
||||||
|
l = 1.000000 * L + 0.0f * M + 0.00000 * S;
|
||||||
|
m = 0.494207 * L + 0.0f * M + 1.24827 * S;
|
||||||
|
s = 0.000000 * L + 0.0f * M + 1.00000 * S;
|
||||||
|
}
|
||||||
|
else if (cbMode == 3) // Tritanope
|
||||||
|
{
|
||||||
|
l = 1.000000 * L + 0.000000 * M + 0.0 * S;
|
||||||
|
m = 0.000000 * L + 1.000000 * M + 0.0 * S;
|
||||||
|
s = -0.395913 * L + 0.801109 * M + 0.0 * S;
|
||||||
|
}
|
||||||
|
|
||||||
|
highp vec4 error;
|
||||||
|
error.r = ( 0.080944447900 * l) + (-0.13050440900 * m) + ( 0.116721066 * s);
|
||||||
|
error.g = (-0.010248533500 * l) + ( 0.05401932660 * m) + (-0.113614708 * s);
|
||||||
|
error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + ( 0.693511405 * s);
|
||||||
|
error.a = 0.0;
|
||||||
|
|
||||||
|
error = color - error;
|
||||||
|
color.g += (error.r * 0.7) + (error.g * 1.0);
|
||||||
|
color.b += (error.r * 0.7) + (error.b * 1.0);
|
||||||
|
return color;
|
||||||
|
}
|
|
@ -1,5 +1,7 @@
|
||||||
#version 300 es
|
#version 300 es
|
||||||
|
|
||||||
|
#include "color_blind.h"
|
||||||
|
|
||||||
in highp vec2 uv;
|
in highp vec2 uv;
|
||||||
out highp vec4 color;
|
out highp vec4 color;
|
||||||
|
|
||||||
|
@ -13,39 +15,5 @@ void main()
|
||||||
color = texture(sampler1, uv);
|
color = texture(sampler1, uv);
|
||||||
|
|
||||||
if (cbMode > 0)
|
if (cbMode > 0)
|
||||||
{
|
color = cbTransform(color, cbMode);
|
||||||
highp float L = (17.8824000 * color.r) + (43.516100 * color.g) + (4.11935 * color.b);
|
|
||||||
highp float M = (03.4556500 * color.r) + (27.155400 * color.g) + (3.86714 * color.b);
|
|
||||||
highp float S = (00.0299566 * color.r) + (00.184309 * color.g) + (1.46709 * color.b);
|
|
||||||
highp float l, m, s;
|
|
||||||
|
|
||||||
if (cbMode == 1) // Protanope
|
|
||||||
{
|
|
||||||
l = 0.0f * L + 2.02344f * M + -2.52581f * S;
|
|
||||||
m = 0.0f * L + 1.0f * M + 0.0f * S;
|
|
||||||
s = 0.0f * L + 0.0f * M + 1.0f * S;
|
|
||||||
}
|
|
||||||
else if (cbMode == 2) // Deuteranope
|
|
||||||
{
|
|
||||||
l = 1.000000 * L + 0.0f * M + 0.00000 * S;
|
|
||||||
m = 0.494207 * L + 0.0f * M + 1.24827 * S;
|
|
||||||
s = 0.000000 * L + 0.0f * M + 1.00000 * S;
|
|
||||||
}
|
|
||||||
else if (cbMode == 3) // Tritanope
|
|
||||||
{
|
|
||||||
l = 1.000000 * L + 0.000000 * M + 0.0 * S;
|
|
||||||
m = 0.000000 * L + 1.000000 * M + 0.0 * S;
|
|
||||||
s = -0.395913 * L + 0.801109 * M + 0.0 * S;
|
|
||||||
}
|
|
||||||
|
|
||||||
highp vec4 error;
|
|
||||||
error.r = ( 0.080944447900 * l) + (-0.13050440900 * m) + ( 0.116721066 * s);
|
|
||||||
error.g = (-0.010248533500 * l) + ( 0.05401932660 * m) + (-0.113614708 * s);
|
|
||||||
error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + ( 0.693511405 * s);
|
|
||||||
error.a = 0.0;
|
|
||||||
|
|
||||||
error = color - error;
|
|
||||||
color.g += (error.r * 0.7) + (error.g * 1.0);
|
|
||||||
color.b += (error.r * 0.7) + (error.b * 1.0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
#define EGL_SCALE_LINEAR 2
|
#define EGL_SCALE_LINEAR 2
|
||||||
#define EGL_SCALE_MAX 3
|
#define EGL_SCALE_MAX 3
|
||||||
|
|
||||||
|
#include "color_blind.h"
|
||||||
|
|
||||||
in highp vec2 uv;
|
in highp vec2 uv;
|
||||||
out highp vec4 color;
|
out highp vec4 color;
|
||||||
|
|
||||||
|
@ -31,41 +33,7 @@ void main()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cbMode > 0)
|
if (cbMode > 0)
|
||||||
{
|
color = cbTransform(color, cbMode);
|
||||||
highp float L = (17.8824000 * color.r) + (43.516100 * color.g) + (4.11935 * color.b);
|
|
||||||
highp float M = (03.4556500 * color.r) + (27.155400 * color.g) + (3.86714 * color.b);
|
|
||||||
highp float S = (00.0299566 * color.r) + (00.184309 * color.g) + (1.46709 * color.b);
|
|
||||||
highp float l, m, s;
|
|
||||||
|
|
||||||
if (cbMode == 1) // Protanope
|
|
||||||
{
|
|
||||||
l = 0.0f * L + 2.02344f * M + -2.52581f * S;
|
|
||||||
m = 0.0f * L + 1.0f * M + 0.0f * S;
|
|
||||||
s = 0.0f * L + 0.0f * M + 1.0f * S;
|
|
||||||
}
|
|
||||||
else if (cbMode == 2) // Deuteranope
|
|
||||||
{
|
|
||||||
l = 1.000000 * L + 0.0f * M + 0.00000 * S;
|
|
||||||
m = 0.494207 * L + 0.0f * M + 1.24827 * S;
|
|
||||||
s = 0.000000 * L + 0.0f * M + 1.00000 * S;
|
|
||||||
}
|
|
||||||
else if (cbMode == 3) // Tritanope
|
|
||||||
{
|
|
||||||
l = 1.000000 * L + 0.000000 * M + 0.0 * S;
|
|
||||||
m = 0.000000 * L + 1.000000 * M + 0.0 * S;
|
|
||||||
s = -0.395913 * L + 0.801109 * M + 0.0 * S;
|
|
||||||
}
|
|
||||||
|
|
||||||
highp vec4 error;
|
|
||||||
error.r = ( 0.080944447900 * l) + (-0.13050440900 * m) + ( 0.116721066 * s);
|
|
||||||
error.g = (-0.010248533500 * l) + ( 0.05401932660 * m) + (-0.113614708 * s);
|
|
||||||
error.b = (-0.000365296938 * l) + (-0.00412161469 * m) + ( 0.693511405 * s);
|
|
||||||
error.a = 0.0;
|
|
||||||
|
|
||||||
error = color - error;
|
|
||||||
color.g += (error.r * 0.7) + (error.g * 1.0);
|
|
||||||
color.b += (error.r * 0.7) + (error.b * 1.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (nvGain > 0.0)
|
if (nvGain > 0.0)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue