changes to librw layer, GLES now runtime choice
This commit is contained in:
parent
b58a54527e
commit
82b0103c67
@ -134,6 +134,7 @@ vehicleRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SetRenderState(SRCBLEND, BLENDSRCALPHA);
|
SetRenderState(SRCBLEND, BLENDSRCALPHA);
|
||||||
|
setTexture(1, nil);
|
||||||
|
|
||||||
#ifndef RW_GL_USE_VAOS
|
#ifndef RW_GL_USE_VAOS
|
||||||
disableAttribPointers(header->attribDesc, header->numAttribs);
|
disableAttribPointers(header->attribDesc, header->numAttribs);
|
||||||
@ -158,13 +159,8 @@ CreateVehiclePipe(void)
|
|||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
#ifdef RW_GLES2
|
#include "shaders/neoVehicle_fs_gl.inc"
|
||||||
#include "gl2_shaders/neoVehicle_fs_gl2.inc"
|
#include "shaders/neoVehicle_vs_gl.inc"
|
||||||
#include "gl2_shaders/neoVehicle_vs_gl2.inc"
|
|
||||||
#else
|
|
||||||
#include "shaders/neoVehicle_fs_gl3.inc"
|
|
||||||
#include "shaders/neoVehicle_vs_gl3.inc"
|
|
||||||
#endif
|
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, neoVehicle_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, neoVehicle_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, neoVehicle_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, neoVehicle_frag_src, nil };
|
||||||
neoVehicleShader = Shader::create(vs, fs);
|
neoVehicleShader = Shader::create(vs, fs);
|
||||||
@ -256,6 +252,7 @@ worldRenderCB(rw::Atomic *atomic, rw::gl3::InstanceDataHeader *header)
|
|||||||
drawInst(header, inst);
|
drawInst(header, inst);
|
||||||
inst++;
|
inst++;
|
||||||
}
|
}
|
||||||
|
setTexture(1, nil);
|
||||||
#ifndef RW_GL_USE_VAOS
|
#ifndef RW_GL_USE_VAOS
|
||||||
disableAttribPointers(header->attribDesc, header->numAttribs);
|
disableAttribPointers(header->attribDesc, header->numAttribs);
|
||||||
#endif
|
#endif
|
||||||
@ -273,13 +270,8 @@ CreateWorldPipe(void)
|
|||||||
ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
|
ReadTweakValueTable((char*)work_buff, WorldLightmapBlend);
|
||||||
|
|
||||||
{
|
{
|
||||||
#ifdef RW_GLES2
|
#include "shaders/neoWorldIII_fs_gl.inc"
|
||||||
#include "gl2_shaders/neoWorldIII_fs_gl2.inc"
|
#include "shaders/default_UV2_gl.inc"
|
||||||
#include "gl2_shaders/default_UV2_gl2.inc"
|
|
||||||
#else
|
|
||||||
#include "shaders/neoWorldIII_fs_gl3.inc"
|
|
||||||
#include "shaders/default_UV2_gl3.inc"
|
|
||||||
#endif
|
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, default_UV2_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, default_UV2_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, neoWorldIII_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, neoWorldIII_frag_src, nil };
|
||||||
neoWorldShader = Shader::create(vs, fs);
|
neoWorldShader = Shader::create(vs, fs);
|
||||||
@ -381,13 +373,8 @@ CreateGlossPipe(void)
|
|||||||
using namespace rw::gl3;
|
using namespace rw::gl3;
|
||||||
|
|
||||||
{
|
{
|
||||||
#ifdef RW_GLES2
|
#include "shaders/neoGloss_fs_gl.inc"
|
||||||
#include "gl2_shaders/neoGloss_fs_gl2.inc"
|
#include "shaders/neoGloss_vs_gl.inc"
|
||||||
#include "gl2_shaders/neoGloss_vs_gl2.inc"
|
|
||||||
#else
|
|
||||||
#include "shaders/neoGloss_fs_gl3.inc"
|
|
||||||
#include "shaders/neoGloss_vs_gl3.inc"
|
|
||||||
#endif
|
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, neoGloss_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, neoGloss_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, neoGloss_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, neoGloss_frag_src, nil };
|
||||||
neoGlossShader = Shader::create(vs, fs);
|
neoGlossShader = Shader::create(vs, fs);
|
||||||
@ -558,13 +545,8 @@ CreateRimLightPipes(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#ifdef RW_GLES2
|
#include "shaders/simple_fs_gl.inc"
|
||||||
#include "gl2_shaders/simple_fs_gl2.inc"
|
#include "shaders/neoRimSkin_gl.inc"
|
||||||
#include "gl2_shaders/neoRimSkin_gl2.inc"
|
|
||||||
#else
|
|
||||||
#include "shaders/simple_fs_gl3.inc"
|
|
||||||
#include "shaders/neoRimSkin_gl3.inc"
|
|
||||||
#endif
|
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, neoRimSkin_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, neoRimSkin_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
|
||||||
neoRimSkinShader = Shader::create(vs, fs);
|
neoRimSkinShader = Shader::create(vs, fs);
|
||||||
@ -572,13 +554,8 @@ CreateRimLightPipes(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#ifdef RW_GLES2
|
#include "shaders/simple_fs_gl.inc"
|
||||||
#include "gl2_shaders/simple_fs_gl2.inc"
|
#include "shaders/neoRim_gl.inc"
|
||||||
#include "gl2_shaders/neoRim_gl2.inc"
|
|
||||||
#else
|
|
||||||
#include "shaders/simple_fs_gl3.inc"
|
|
||||||
#include "shaders/neoRim_gl3.inc"
|
|
||||||
#endif
|
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, neoRim_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, neoRim_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, simple_frag_src, nil };
|
||||||
neoRimShader = Shader::create(vs, fs);
|
neoRimShader = Shader::create(vs, fs);
|
||||||
|
@ -150,13 +150,8 @@ CPostFX::Open(RwCamera *cam)
|
|||||||
#ifdef RW_OPENGL
|
#ifdef RW_OPENGL
|
||||||
using namespace rw::gl3;
|
using namespace rw::gl3;
|
||||||
{
|
{
|
||||||
#ifdef RW_GLES2
|
#include "shaders/im2d_gl.inc"
|
||||||
#include "gl2_shaders/im2d_gl2.inc"
|
#include "shaders/colourfilterIII_fs_gl.inc"
|
||||||
#include "gl2_shaders/colourfilterIII_fs_gl2.inc"
|
|
||||||
#else
|
|
||||||
#include "shaders/im2d_gl3.inc"
|
|
||||||
#include "shaders/colourfilterIII_fs_gl3.inc"
|
|
||||||
#endif
|
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, colourfilterIII_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, colourfilterIII_frag_src, nil };
|
||||||
colourFilterIII = Shader::create(vs, fs);
|
colourFilterIII = Shader::create(vs, fs);
|
||||||
@ -164,17 +159,12 @@ CPostFX::Open(RwCamera *cam)
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
#ifdef RW_GLES2
|
#include "shaders/im2d_gl.inc"
|
||||||
#include "gl2_shaders/im2d_gl2.inc"
|
#include "shaders/contrast_fs_gl.inc"
|
||||||
#include "gl2_shaders/contrast_fs_gl2.inc"
|
|
||||||
#else
|
|
||||||
#include "shaders/im2d_gl3.inc"
|
|
||||||
#include "shaders/contrast_fs_gl3.inc"
|
|
||||||
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
|
const char *vs[] = { shaderDecl, header_vert_src, im2d_vert_src, nil };
|
||||||
const char *fs[] = { shaderDecl, header_frag_src, contrast_frag_src, nil };
|
const char *fs[] = { shaderDecl, header_frag_src, contrast_frag_src, nil };
|
||||||
contrast = Shader::create(vs, fs);
|
contrast = Shader::create(vs, fs);
|
||||||
assert(contrast);
|
assert(contrast);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,68 +1,68 @@
|
|||||||
all: im2d_gl3.inc simple_fs_gl3.inc default_UV2_gl3.inc \
|
all: im2d_gl.inc simple_fs_gl.inc default_UV2_gl.inc \
|
||||||
colourfilterIII_fs_gl3.inc contrast_fs_gl3.inc \
|
colourfilterIII_fs_gl.inc contrast_fs_gl.inc \
|
||||||
neoRim_gl3.inc neoRimSkin_gl3.inc \
|
neoRim_gl.inc neoRimSkin_gl.inc \
|
||||||
neoWorldIII_fs_gl3.inc neoGloss_vs_gl3.inc neoGloss_fs_gl3.inc \
|
neoWorldIII_fs_gl.inc neoGloss_vs_gl.inc neoGloss_fs_gl.inc \
|
||||||
neoVehicle_vs_gl3.inc neoVehicle_fs_gl3.inc
|
neoVehicle_vs_gl.inc neoVehicle_fs_gl.inc
|
||||||
|
|
||||||
im2d_gl3.inc: im2d.vert
|
im2d_gl.inc: im2d.vert
|
||||||
(echo 'const char *im2d_vert_src =';\
|
(echo 'const char *im2d_vert_src =';\
|
||||||
sed 's/..*/"&\\n"/' im2d.vert;\
|
sed 's/..*/"&\\n"/' im2d.vert;\
|
||||||
echo ';') >im2d_gl3.inc
|
echo ';') >im2d_gl.inc
|
||||||
|
|
||||||
simple_fs_gl3.inc: simple.frag
|
simple_fs_gl.inc: simple.frag
|
||||||
(echo 'const char *simple_frag_src =';\
|
(echo 'const char *simple_frag_src =';\
|
||||||
sed 's/..*/"&\\n"/' simple.frag;\
|
sed 's/..*/"&\\n"/' simple.frag;\
|
||||||
echo ';') >simple_fs_gl3.inc
|
echo ';') >simple_fs_gl.inc
|
||||||
|
|
||||||
default_UV2_gl3.inc: default_UV2.vert
|
default_UV2_gl.inc: default_UV2.vert
|
||||||
(echo 'const char *default_UV2_vert_src =';\
|
(echo 'const char *default_UV2_vert_src =';\
|
||||||
sed 's/..*/"&\\n"/' default_UV2.vert;\
|
sed 's/..*/"&\\n"/' default_UV2.vert;\
|
||||||
echo ';') >default_UV2_gl3.inc
|
echo ';') >default_UV2_gl.inc
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
colourfilterIII_fs_gl3.inc: colourfilterIII.frag
|
colourfilterIII_fs_gl.inc: colourfilterIII.frag
|
||||||
(echo 'const char *colourfilterIII_frag_src =';\
|
(echo 'const char *colourfilterIII_frag_src =';\
|
||||||
sed 's/..*/"&\\n"/' colourfilterIII.frag;\
|
sed 's/..*/"&\\n"/' colourfilterIII.frag;\
|
||||||
echo ';') >colourfilterIII_fs_gl3.inc
|
echo ';') >colourfilterIII_fs_gl.inc
|
||||||
|
|
||||||
contrast_fs_gl3.inc: contrast.frag
|
contrast_fs_gl.inc: contrast.frag
|
||||||
(echo 'const char *contrast_frag_src =';\
|
(echo 'const char *contrast_frag_src =';\
|
||||||
sed 's/..*/"&\\n"/' contrast.frag;\
|
sed 's/..*/"&\\n"/' contrast.frag;\
|
||||||
echo ';') >contrast_fs_gl3.inc
|
echo ';') >contrast_fs_gl.inc
|
||||||
|
|
||||||
|
|
||||||
neoRim_gl3.inc: neoRim.vert
|
neoRim_gl.inc: neoRim.vert
|
||||||
(echo 'const char *neoRim_vert_src =';\
|
(echo 'const char *neoRim_vert_src =';\
|
||||||
sed 's/..*/"&\\n"/' neoRim.vert;\
|
sed 's/..*/"&\\n"/' neoRim.vert;\
|
||||||
echo ';') >neoRim_gl3.inc
|
echo ';') >neoRim_gl.inc
|
||||||
|
|
||||||
neoRimSkin_gl3.inc: neoRimSkin.vert
|
neoRimSkin_gl.inc: neoRimSkin.vert
|
||||||
(echo 'const char *neoRimSkin_vert_src =';\
|
(echo 'const char *neoRimSkin_vert_src =';\
|
||||||
sed 's/..*/"&\\n"/' neoRimSkin.vert;\
|
sed 's/..*/"&\\n"/' neoRimSkin.vert;\
|
||||||
echo ';') >neoRimSkin_gl3.inc
|
echo ';') >neoRimSkin_gl.inc
|
||||||
|
|
||||||
neoWorldIII_fs_gl3.inc: neoWorldIII.frag
|
neoWorldIII_fs_gl.inc: neoWorldIII.frag
|
||||||
(echo 'const char *neoWorldIII_frag_src =';\
|
(echo 'const char *neoWorldIII_frag_src =';\
|
||||||
sed 's/..*/"&\\n"/' neoWorldIII.frag;\
|
sed 's/..*/"&\\n"/' neoWorldIII.frag;\
|
||||||
echo ';') >neoWorldIII_fs_gl3.inc
|
echo ';') >neoWorldIII_fs_gl.inc
|
||||||
|
|
||||||
neoGloss_fs_gl3.inc: neoGloss.frag
|
neoGloss_fs_gl.inc: neoGloss.frag
|
||||||
(echo 'const char *neoGloss_frag_src =';\
|
(echo 'const char *neoGloss_frag_src =';\
|
||||||
sed 's/..*/"&\\n"/' neoGloss.frag;\
|
sed 's/..*/"&\\n"/' neoGloss.frag;\
|
||||||
echo ';') >neoGloss_fs_gl3.inc
|
echo ';') >neoGloss_fs_gl.inc
|
||||||
|
|
||||||
neoGloss_vs_gl3.inc: neoGloss.vert
|
neoGloss_vs_gl.inc: neoGloss.vert
|
||||||
(echo 'const char *neoGloss_vert_src =';\
|
(echo 'const char *neoGloss_vert_src =';\
|
||||||
sed 's/..*/"&\\n"/' neoGloss.vert;\
|
sed 's/..*/"&\\n"/' neoGloss.vert;\
|
||||||
echo ';') >neoGloss_vs_gl3.inc
|
echo ';') >neoGloss_vs_gl.inc
|
||||||
|
|
||||||
neoVehicle_vs_gl3.inc: neoVehicle.vert
|
neoVehicle_vs_gl.inc: neoVehicle.vert
|
||||||
(echo 'const char *neoVehicle_vert_src =';\
|
(echo 'const char *neoVehicle_vert_src =';\
|
||||||
sed 's/..*/"&\\n"/' neoVehicle.vert;\
|
sed 's/..*/"&\\n"/' neoVehicle.vert;\
|
||||||
echo ';') >neoVehicle_vs_gl3.inc
|
echo ';') >neoVehicle_vs_gl.inc
|
||||||
|
|
||||||
neoVehicle_fs_gl3.inc: neoVehicle.frag
|
neoVehicle_fs_gl.inc: neoVehicle.frag
|
||||||
(echo 'const char *neoVehicle_frag_src =';\
|
(echo 'const char *neoVehicle_frag_src =';\
|
||||||
sed 's/..*/"&\\n"/' neoVehicle.frag;\
|
sed 's/..*/"&\\n"/' neoVehicle.frag;\
|
||||||
echo ';') >neoVehicle_fs_gl3.inc
|
echo ';') >neoVehicle_fs_gl.inc
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
uniform sampler2D tex0;
|
uniform sampler2D tex0;
|
||||||
uniform vec4 u_blurcolor;
|
uniform vec4 u_blurcolor;
|
||||||
|
|
||||||
in vec4 v_color;
|
FSIN vec4 v_color;
|
||||||
in vec2 v_tex0;
|
FSIN vec2 v_tex0;
|
||||||
in float v_fog;
|
FSIN float v_fog;
|
||||||
|
|
||||||
out vec4 color;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
main(void)
|
main(void)
|
||||||
@ -17,7 +15,10 @@ main(void)
|
|||||||
vec4 tmp = dst*(1.0-a) + prev*u_blurcolor*a;
|
vec4 tmp = dst*(1.0-a) + prev*u_blurcolor*a;
|
||||||
prev = clamp(tmp, 0.0, 1.0);
|
prev = clamp(tmp, 0.0, 1.0);
|
||||||
}
|
}
|
||||||
|
vec4 color;
|
||||||
color.rgb = prev.rgb;
|
color.rgb = prev.rgb;
|
||||||
color.a = 1.0f;
|
color.a = 1.0f;
|
||||||
|
|
||||||
|
FRAGCOLOR(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
src/extras/shaders/colourfilterIII_fs_gl.inc
Normal file
26
src/extras/shaders/colourfilterIII_fs_gl.inc
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
const char *colourfilterIII_frag_src =
|
||||||
|
"uniform sampler2D tex0;\n"
|
||||||
|
"uniform vec4 u_blurcolor;\n"
|
||||||
|
|
||||||
|
"FSIN vec4 v_color;\n"
|
||||||
|
"FSIN vec2 v_tex0;\n"
|
||||||
|
"FSIN float v_fog;\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" float a = u_blurcolor.a;\n"
|
||||||
|
" vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
|
||||||
|
" vec4 prev = dst;\n"
|
||||||
|
" for(int i = 0; i < 5; i++){\n"
|
||||||
|
" vec4 tmp = dst*(1.0-a) + prev*u_blurcolor*a;\n"
|
||||||
|
" prev = clamp(tmp, 0.0, 1.0);\n"
|
||||||
|
" }\n"
|
||||||
|
" vec4 color;\n"
|
||||||
|
" color.rgb = prev.rgb;\n"
|
||||||
|
" color.a = 1.0f;\n"
|
||||||
|
|
||||||
|
" FRAGCOLOR(color);\n"
|
||||||
|
"}\n"
|
||||||
|
|
||||||
|
;
|
@ -2,17 +2,18 @@ uniform sampler2D tex0;
|
|||||||
uniform vec3 u_contrastAdd;
|
uniform vec3 u_contrastAdd;
|
||||||
uniform vec3 u_contrastMult;
|
uniform vec3 u_contrastMult;
|
||||||
|
|
||||||
in vec4 v_color;
|
FSIN vec4 v_color;
|
||||||
in vec2 v_tex0;
|
FSIN vec2 v_tex0;
|
||||||
in float v_fog;
|
FSIN float v_fog;
|
||||||
|
|
||||||
out vec4 color;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
||||||
|
vec4 color;
|
||||||
color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;
|
color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;
|
||||||
color.a = 1.0f;
|
color.a = 1.0f;
|
||||||
|
|
||||||
|
FRAGCOLOR(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
21
src/extras/shaders/contrast_fs_gl.inc
Normal file
21
src/extras/shaders/contrast_fs_gl.inc
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
const char *contrast_frag_src =
|
||||||
|
"uniform sampler2D tex0;\n"
|
||||||
|
"uniform vec3 u_contrastAdd;\n"
|
||||||
|
"uniform vec3 u_contrastMult;\n"
|
||||||
|
|
||||||
|
"FSIN vec4 v_color;\n"
|
||||||
|
"FSIN vec2 v_tex0;\n"
|
||||||
|
"FSIN float v_fog;\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 dst = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
|
||||||
|
" vec4 color;\n"
|
||||||
|
" color.rgb = dst.rgb*u_contrastMult + u_contrastAdd;\n"
|
||||||
|
" color.a = 1.0f;\n"
|
||||||
|
|
||||||
|
" FRAGCOLOR(color);\n"
|
||||||
|
"}\n"
|
||||||
|
|
||||||
|
;
|
@ -1,13 +1,9 @@
|
|||||||
layout(location = 0) in vec3 in_pos;
|
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||||
layout(location = 1) in vec3 in_normal;
|
|
||||||
layout(location = 2) in vec4 in_color;
|
|
||||||
layout(location = 3) in vec2 in_tex0;
|
|
||||||
layout(location = 4) in vec2 in_tex1;
|
|
||||||
|
|
||||||
out vec4 v_color;
|
VSOUT vec4 v_color;
|
||||||
out vec2 v_tex0;
|
VSOUT vec2 v_tex0;
|
||||||
out vec2 v_tex1;
|
VSOUT vec2 v_tex1;
|
||||||
out float v_fog;
|
VSOUT float v_fog;
|
||||||
|
|
||||||
void
|
void
|
||||||
main(void)
|
main(void)
|
||||||
|
27
src/extras/shaders/default_UV2_gl.inc
Normal file
27
src/extras/shaders/default_UV2_gl.inc
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
const char *default_UV2_vert_src =
|
||||||
|
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||||
|
|
||||||
|
"VSOUT vec4 v_color;\n"
|
||||||
|
"VSOUT vec2 v_tex0;\n"
|
||||||
|
"VSOUT vec2 v_tex1;\n"
|
||||||
|
"VSOUT float v_fog;\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 Vertex = u_world * vec4(in_pos, 1.0);\n"
|
||||||
|
" gl_Position = u_proj * u_view * Vertex;\n"
|
||||||
|
" vec3 Normal = mat3(u_world) * in_normal;\n"
|
||||||
|
|
||||||
|
" v_tex0 = in_tex0;\n"
|
||||||
|
" v_tex1 = in_tex1;\n"
|
||||||
|
|
||||||
|
" v_color = in_color;\n"
|
||||||
|
" v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
|
||||||
|
" v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;\n"
|
||||||
|
" v_color = clamp(v_color, 0.0, 1.0);\n"
|
||||||
|
" v_color *= u_matColor;\n"
|
||||||
|
|
||||||
|
" v_fog = DoFog(gl_Position.w);\n"
|
||||||
|
"}\n"
|
||||||
|
;
|
@ -1,12 +1,10 @@
|
|||||||
uniform vec4 u_xform;
|
uniform vec4 u_xform;
|
||||||
|
|
||||||
layout(location = 0) in vec4 in_pos;
|
VSIN(ATTRIB_POS) vec4 in_pos;
|
||||||
layout(location = 2) in vec4 in_color;
|
|
||||||
layout(location = 3) in vec2 in_tex0;
|
|
||||||
|
|
||||||
out vec4 v_color;
|
VSOUT vec4 v_color;
|
||||||
out vec2 v_tex0;
|
VSOUT vec2 v_tex0;
|
||||||
out float v_fog;
|
VSOUT float v_fog;
|
||||||
|
|
||||||
void
|
void
|
||||||
main(void)
|
main(void)
|
||||||
|
21
src/extras/shaders/im2d_gl.inc
Normal file
21
src/extras/shaders/im2d_gl.inc
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
const char *im2d_vert_src =
|
||||||
|
"uniform vec4 u_xform;\n"
|
||||||
|
|
||||||
|
"VSIN(ATTRIB_POS) vec4 in_pos;\n"
|
||||||
|
|
||||||
|
"VSOUT vec4 v_color;\n"
|
||||||
|
"VSOUT vec2 v_tex0;\n"
|
||||||
|
"VSOUT float v_fog;\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" gl_Position = in_pos;\n"
|
||||||
|
" gl_Position.w = 1.0;\n"
|
||||||
|
" gl_Position.xy = gl_Position.xy * u_xform.xy + u_xform.zw;\n"
|
||||||
|
" v_fog = DoFog(gl_Position.z);\n"
|
||||||
|
" gl_Position.xyz *= gl_Position.w;\n"
|
||||||
|
" v_color = in_color;\n"
|
||||||
|
" v_tex0 = in_tex0;\n"
|
||||||
|
"}\n"
|
||||||
|
;
|
@ -4,17 +4,15 @@ uniform vec4 u_reflProps;
|
|||||||
|
|
||||||
#define glossMult (u_reflProps.x)
|
#define glossMult (u_reflProps.x)
|
||||||
|
|
||||||
in vec3 v_normal;
|
FSIN vec3 v_normal;
|
||||||
in vec3 v_light;
|
FSIN vec3 v_light;
|
||||||
in vec2 v_tex0;
|
FSIN vec2 v_tex0;
|
||||||
in float v_fog;
|
FSIN float v_fog;
|
||||||
|
|
||||||
out vec4 color;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
color = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
vec4 color = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
||||||
vec3 n = 2.0*v_normal-1.0; // unpack
|
vec3 n = 2.0*v_normal-1.0; // unpack
|
||||||
vec3 v = 2.0*v_light-1.0; //
|
vec3 v = 2.0*v_light-1.0; //
|
||||||
|
|
||||||
@ -22,5 +20,7 @@ main(void)
|
|||||||
color = s*s*s*s*s*s*s*s*color*v_fog*glossMult;
|
color = s*s*s*s*s*s*s*s*color*v_fog*glossMult;
|
||||||
|
|
||||||
DoAlphaTest(color.a);
|
DoAlphaTest(color.a);
|
||||||
|
|
||||||
|
FRAGCOLOR(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,15 +1,11 @@
|
|||||||
uniform vec3 u_eye;
|
uniform vec3 u_eye;
|
||||||
|
|
||||||
|
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||||
|
|
||||||
layout(location = 0) in vec3 in_pos;
|
VSOUT vec3 v_normal;
|
||||||
layout(location = 1) in vec3 in_normal;
|
VSOUT vec3 v_light;
|
||||||
layout(location = 2) in vec4 in_color;
|
VSOUT vec2 v_tex0;
|
||||||
layout(location = 3) in vec2 in_tex0;
|
VSOUT float v_fog;
|
||||||
|
|
||||||
out vec3 v_normal;
|
|
||||||
out vec3 v_light;
|
|
||||||
out vec2 v_tex0;
|
|
||||||
out float v_fog;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
main(void)
|
main(void)
|
||||||
|
28
src/extras/shaders/neoGloss_fs_gl.inc
Normal file
28
src/extras/shaders/neoGloss_fs_gl.inc
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
const char *neoGloss_frag_src =
|
||||||
|
"uniform sampler2D tex0;\n"
|
||||||
|
|
||||||
|
"uniform vec4 u_reflProps;\n"
|
||||||
|
|
||||||
|
"#define glossMult (u_reflProps.x)\n"
|
||||||
|
|
||||||
|
"FSIN vec3 v_normal;\n"
|
||||||
|
"FSIN vec3 v_light;\n"
|
||||||
|
"FSIN vec2 v_tex0;\n"
|
||||||
|
"FSIN float v_fog;\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 color = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
|
||||||
|
" vec3 n = 2.0*v_normal-1.0; // unpack\n"
|
||||||
|
" vec3 v = 2.0*v_light-1.0; //\n"
|
||||||
|
|
||||||
|
" float s = dot(n, v);\n"
|
||||||
|
" color = s*s*s*s*s*s*s*s*color*v_fog*glossMult;\n"
|
||||||
|
|
||||||
|
" DoAlphaTest(color.a);\n"
|
||||||
|
|
||||||
|
" FRAGCOLOR(color);\n"
|
||||||
|
"}\n"
|
||||||
|
|
||||||
|
;
|
27
src/extras/shaders/neoGloss_vs_gl.inc
Normal file
27
src/extras/shaders/neoGloss_vs_gl.inc
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
const char *neoGloss_vert_src =
|
||||||
|
"uniform vec3 u_eye;\n"
|
||||||
|
|
||||||
|
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||||
|
|
||||||
|
"VSOUT vec3 v_normal;\n"
|
||||||
|
"VSOUT vec3 v_light;\n"
|
||||||
|
"VSOUT vec2 v_tex0;\n"
|
||||||
|
"VSOUT float v_fog;\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 Vertex = u_world * vec4(in_pos, 1.0);\n"
|
||||||
|
" gl_Position = u_proj * u_view * Vertex;\n"
|
||||||
|
" vec3 Normal = mat3(u_world) * in_normal;\n"
|
||||||
|
|
||||||
|
" v_tex0 = in_tex0;\n"
|
||||||
|
|
||||||
|
" vec3 viewVec = normalize(u_eye - Vertex.xyz);\n"
|
||||||
|
" vec3 Light = normalize(viewVec - u_lightDirection[0].xyz);\n"
|
||||||
|
" v_normal = 0.5*(1.0 + vec3(0.0, 0.0, 1.0)); // compress\n"
|
||||||
|
" v_light = 0.5*(1.0 + Light); //\n"
|
||||||
|
|
||||||
|
" v_fog = DoFog(gl_Position.w);\n"
|
||||||
|
"}\n"
|
||||||
|
;
|
@ -3,14 +3,11 @@ uniform vec4 u_rampStart;
|
|||||||
uniform vec4 u_rampEnd;
|
uniform vec4 u_rampEnd;
|
||||||
uniform vec3 u_rimData;
|
uniform vec3 u_rimData;
|
||||||
|
|
||||||
layout(location = 0) in vec3 in_pos;
|
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||||
layout(location = 1) in vec3 in_normal;
|
|
||||||
layout(location = 2) in vec4 in_color;
|
|
||||||
layout(location = 3) in vec2 in_tex0;
|
|
||||||
|
|
||||||
out vec4 v_color;
|
VSOUT vec4 v_color;
|
||||||
out vec2 v_tex0;
|
VSOUT vec2 v_tex0;
|
||||||
out float v_fog;
|
VSOUT float v_fog;
|
||||||
|
|
||||||
void
|
void
|
||||||
main(void)
|
main(void)
|
||||||
|
@ -5,16 +5,11 @@ uniform vec4 u_rampStart;
|
|||||||
uniform vec4 u_rampEnd;
|
uniform vec4 u_rampEnd;
|
||||||
uniform vec3 u_rimData;
|
uniform vec3 u_rimData;
|
||||||
|
|
||||||
layout(location = 0) in vec3 in_pos;
|
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||||
layout(location = 1) in vec3 in_normal;
|
|
||||||
layout(location = 2) in vec4 in_color;
|
|
||||||
layout(location = 3) in vec2 in_tex0;
|
|
||||||
layout(location = 11) in vec4 in_weights;
|
|
||||||
layout(location = 12) in vec4 in_indices;
|
|
||||||
|
|
||||||
out vec4 v_color;
|
VSOUT vec4 v_color;
|
||||||
out vec2 v_tex0;
|
VSOUT vec2 v_tex0;
|
||||||
out float v_fog;
|
VSOUT float v_fog;
|
||||||
|
|
||||||
void
|
void
|
||||||
main(void)
|
main(void)
|
||||||
|
45
src/extras/shaders/neoRimSkin_gl.inc
Normal file
45
src/extras/shaders/neoRimSkin_gl.inc
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
const char *neoRimSkin_vert_src =
|
||||||
|
"uniform mat4 u_boneMatrices[64];\n"
|
||||||
|
|
||||||
|
"uniform vec3 u_viewVec;\n"
|
||||||
|
"uniform vec4 u_rampStart;\n"
|
||||||
|
"uniform vec4 u_rampEnd;\n"
|
||||||
|
"uniform vec3 u_rimData;\n"
|
||||||
|
|
||||||
|
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||||
|
|
||||||
|
"VSOUT vec4 v_color;\n"
|
||||||
|
"VSOUT vec2 v_tex0;\n"
|
||||||
|
"VSOUT float v_fog;\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec3 SkinVertex = vec3(0.0, 0.0, 0.0);\n"
|
||||||
|
" vec3 SkinNormal = vec3(0.0, 0.0, 0.0);\n"
|
||||||
|
" for(int i = 0; i < 4; i++){\n"
|
||||||
|
" SkinVertex += (u_boneMatrices[int(in_indices[i])] * vec4(in_pos, 1.0)).xyz * in_weights[i];\n"
|
||||||
|
" SkinNormal += (mat3(u_boneMatrices[int(in_indices[i])]) * in_normal) * in_weights[i];\n"
|
||||||
|
" }\n"
|
||||||
|
|
||||||
|
" vec4 Vertex = u_world * vec4(SkinVertex, 1.0);\n"
|
||||||
|
" gl_Position = u_proj * u_view * Vertex;\n"
|
||||||
|
" vec3 Normal = mat3(u_world) * SkinNormal;\n"
|
||||||
|
|
||||||
|
" v_tex0 = in_tex0;\n"
|
||||||
|
|
||||||
|
" v_color = in_color;\n"
|
||||||
|
" v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
|
||||||
|
" v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;\n"
|
||||||
|
|
||||||
|
" // rim light\n"
|
||||||
|
" float f = u_rimData.x - u_rimData.y*dot(Normal, u_viewVec);\n"
|
||||||
|
" vec4 rimlight = clamp(mix(u_rampEnd, u_rampStart, f)*u_rimData.z, 0.0, 1.0);\n"
|
||||||
|
" v_color.rgb += rimlight.rgb;\n"
|
||||||
|
|
||||||
|
" v_color = clamp(v_color, 0.0, 1.0);\n"
|
||||||
|
" v_color *= u_matColor;\n"
|
||||||
|
|
||||||
|
" v_fog = DoFog(gl_Position.z);\n"
|
||||||
|
"}\n"
|
||||||
|
;
|
36
src/extras/shaders/neoRim_gl.inc
Normal file
36
src/extras/shaders/neoRim_gl.inc
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
const char *neoRim_vert_src =
|
||||||
|
"uniform vec3 u_viewVec;\n"
|
||||||
|
"uniform vec4 u_rampStart;\n"
|
||||||
|
"uniform vec4 u_rampEnd;\n"
|
||||||
|
"uniform vec3 u_rimData;\n"
|
||||||
|
|
||||||
|
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||||
|
|
||||||
|
"VSOUT vec4 v_color;\n"
|
||||||
|
"VSOUT vec2 v_tex0;\n"
|
||||||
|
"VSOUT float v_fog;\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 Vertex = u_world * vec4(in_pos, 1.0);\n"
|
||||||
|
" gl_Position = u_proj * u_view * Vertex;\n"
|
||||||
|
" vec3 Normal = mat3(u_world) * in_normal;\n"
|
||||||
|
|
||||||
|
" v_tex0 = in_tex0;\n"
|
||||||
|
|
||||||
|
" v_color = in_color;\n"
|
||||||
|
" v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
|
||||||
|
" v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse;\n"
|
||||||
|
|
||||||
|
" // rim light\n"
|
||||||
|
" float f = u_rimData.x - u_rimData.y*dot(Normal, u_viewVec);\n"
|
||||||
|
" vec4 rimlight = clamp(mix(u_rampEnd, u_rampStart, f)*u_rimData.z, 0.0, 1.0);\n"
|
||||||
|
" v_color.rgb += rimlight.rgb;\n"
|
||||||
|
|
||||||
|
" v_color = clamp(v_color, 0.0, 1.0);\n"
|
||||||
|
" v_color *= u_matColor;\n"
|
||||||
|
|
||||||
|
" v_fog = DoFog(gl_Position.w);\n"
|
||||||
|
"}\n"
|
||||||
|
;
|
@ -1,13 +1,11 @@
|
|||||||
uniform sampler2D tex0;
|
uniform sampler2D tex0;
|
||||||
uniform sampler2D tex1;
|
uniform sampler2D tex1;
|
||||||
|
|
||||||
in vec4 v_color;
|
FSIN vec4 v_color;
|
||||||
in vec4 v_reflcolor;
|
FSIN vec4 v_reflcolor;
|
||||||
in vec2 v_tex0;
|
FSIN vec2 v_tex0;
|
||||||
in vec2 v_tex1;
|
FSIN vec2 v_tex1;
|
||||||
in float v_fog;
|
FSIN float v_fog;
|
||||||
|
|
||||||
out vec4 color;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
main(void)
|
main(void)
|
||||||
@ -20,9 +18,12 @@ main(void)
|
|||||||
|
|
||||||
vec3 pass2 = v_reflcolor.rgb * v_fog;
|
vec3 pass2 = v_reflcolor.rgb * v_fog;
|
||||||
|
|
||||||
|
vec4 color;
|
||||||
color.rgb = pass1.rgb*pass1.a + pass2;
|
color.rgb = pass1.rgb*pass1.a + pass2;
|
||||||
color.a = pass1.a;
|
color.a = pass1.a;
|
||||||
|
|
||||||
// color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);
|
// color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);
|
||||||
DoAlphaTest(color.a);
|
DoAlphaTest(color.a);
|
||||||
|
|
||||||
|
FRAGCOLOR(color);
|
||||||
}
|
}
|
||||||
|
@ -8,16 +8,13 @@ uniform vec4 u_specColor[5];
|
|||||||
#define shininess (u_reflProps.z)
|
#define shininess (u_reflProps.z)
|
||||||
#define specularity (u_reflProps.w)
|
#define specularity (u_reflProps.w)
|
||||||
|
|
||||||
layout(location = 0) in vec3 in_pos;
|
VSIN(ATTRIB_POS) vec3 in_pos;
|
||||||
layout(location = 1) in vec3 in_normal;
|
|
||||||
layout(location = 2) in vec4 in_color;
|
|
||||||
layout(location = 3) in vec2 in_tex0;
|
|
||||||
|
|
||||||
out vec4 v_color;
|
VSOUT vec4 v_color;
|
||||||
out vec4 v_reflcolor;
|
VSOUT vec4 v_reflcolor;
|
||||||
out vec2 v_tex0;
|
VSOUT vec2 v_tex0;
|
||||||
out vec2 v_tex1;
|
VSOUT vec2 v_tex1;
|
||||||
out float v_fog;
|
VSOUT float v_fog;
|
||||||
|
|
||||||
vec3 DoDirLightSpec(vec3 Ldir, vec3 Lcol, vec3 N, vec3 V, float power)
|
vec3 DoDirLightSpec(vec3 Ldir, vec3 Lcol, vec3 N, vec3 V, float power)
|
||||||
{
|
{
|
||||||
|
31
src/extras/shaders/neoVehicle_fs_gl.inc
Normal file
31
src/extras/shaders/neoVehicle_fs_gl.inc
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
const char *neoVehicle_frag_src =
|
||||||
|
"uniform sampler2D tex0;\n"
|
||||||
|
"uniform sampler2D tex1;\n"
|
||||||
|
|
||||||
|
"FSIN vec4 v_color;\n"
|
||||||
|
"FSIN vec4 v_reflcolor;\n"
|
||||||
|
"FSIN vec2 v_tex0;\n"
|
||||||
|
"FSIN vec2 v_tex1;\n"
|
||||||
|
"FSIN float v_fog;\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 pass1 = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
|
||||||
|
" vec3 envmap = texture(tex1, vec2(v_tex1.x, 1.0-v_tex1.y)).rgb;\n"
|
||||||
|
" pass1.rgb = mix(pass1.rgb, envmap, v_reflcolor.a);\n"
|
||||||
|
" pass1.rgb = mix(u_fogColor.rgb, pass1.rgb, v_fog);\n"
|
||||||
|
"// pass1.rgb += v_reflcolor.rgb * v_fog;\n"
|
||||||
|
|
||||||
|
" vec3 pass2 = v_reflcolor.rgb * v_fog;\n"
|
||||||
|
|
||||||
|
" vec4 color;\n"
|
||||||
|
" color.rgb = pass1.rgb*pass1.a + pass2;\n"
|
||||||
|
" color.a = pass1.a;\n"
|
||||||
|
|
||||||
|
"// color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);\n"
|
||||||
|
" DoAlphaTest(color.a);\n"
|
||||||
|
|
||||||
|
" FRAGCOLOR(color);\n"
|
||||||
|
"}\n"
|
||||||
|
;
|
53
src/extras/shaders/neoVehicle_vs_gl.inc
Normal file
53
src/extras/shaders/neoVehicle_vs_gl.inc
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
const char *neoVehicle_vert_src =
|
||||||
|
"uniform vec3 u_eye;\n"
|
||||||
|
"uniform vec4 u_reflProps;\n"
|
||||||
|
"uniform vec4 u_specDir[5];\n"
|
||||||
|
"uniform vec4 u_specColor[5];\n"
|
||||||
|
|
||||||
|
"#define fresnel (u_reflProps.x)\n"
|
||||||
|
"#define lightStrength (u_reflProps.y) // speclight alpha\n"
|
||||||
|
"#define shininess (u_reflProps.z)\n"
|
||||||
|
"#define specularity (u_reflProps.w)\n"
|
||||||
|
|
||||||
|
"VSIN(ATTRIB_POS) vec3 in_pos;\n"
|
||||||
|
|
||||||
|
"VSOUT vec4 v_color;\n"
|
||||||
|
"VSOUT vec4 v_reflcolor;\n"
|
||||||
|
"VSOUT vec2 v_tex0;\n"
|
||||||
|
"VSOUT vec2 v_tex1;\n"
|
||||||
|
"VSOUT float v_fog;\n"
|
||||||
|
|
||||||
|
"vec3 DoDirLightSpec(vec3 Ldir, vec3 Lcol, vec3 N, vec3 V, float power)\n"
|
||||||
|
"{\n"
|
||||||
|
" return pow(clamp(dot(N, normalize(V + -Ldir)), 0.0, 1.0), power)*Lcol;\n"
|
||||||
|
"}\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 Vertex = u_world * vec4(in_pos, 1.0);\n"
|
||||||
|
" gl_Position = u_proj * u_view * Vertex;\n"
|
||||||
|
" vec3 Normal = mat3(u_world) * in_normal;\n"
|
||||||
|
" vec3 viewVec = normalize(u_eye - Vertex.xyz);\n"
|
||||||
|
|
||||||
|
" v_tex0 = in_tex0;\n"
|
||||||
|
|
||||||
|
" v_color = in_color;\n"
|
||||||
|
" v_color.rgb += u_ambLight.rgb*surfAmbient;\n"
|
||||||
|
" v_color.rgb += DoDynamicLight(Vertex.xyz, Normal)*surfDiffuse*lightStrength;\n"
|
||||||
|
" v_color = clamp(v_color, 0.0, 1.0);\n"
|
||||||
|
" v_color *= u_matColor;\n"
|
||||||
|
|
||||||
|
" // reflect V along Normal\n"
|
||||||
|
" vec3 uv2 = Normal*dot(viewVec, Normal)*2.0 - viewVec;\n"
|
||||||
|
" v_tex1 = uv2.xy*0.5 + 0.5;\n"
|
||||||
|
" float b = 1.0 - clamp(dot(viewVec, Normal), 0.0, 1.0);\n"
|
||||||
|
" v_reflcolor = vec4(0.0, 0.0, 0.0, 1.0);\n"
|
||||||
|
" v_reflcolor.a = mix(b*b*b*b*b, 1.0f, fresnel)*shininess;\n"
|
||||||
|
|
||||||
|
" for(int i = 0; i < 5; i++)\n"
|
||||||
|
" v_reflcolor.rgb += DoDirLightSpec(u_specDir[i].xyz, u_specColor[i].rgb, Normal, viewVec, u_specDir[i].w)*specularity*lightStrength;\n"
|
||||||
|
|
||||||
|
" v_fog = DoFog(gl_Position.w);\n"
|
||||||
|
"}\n"
|
||||||
|
;
|
@ -3,12 +3,10 @@ uniform sampler2D tex1;
|
|||||||
|
|
||||||
uniform vec4 u_lightMap;
|
uniform vec4 u_lightMap;
|
||||||
|
|
||||||
in vec4 v_color;
|
FSIN vec4 v_color;
|
||||||
in vec2 v_tex0;
|
FSIN vec2 v_tex0;
|
||||||
in vec2 v_tex1;
|
FSIN vec2 v_tex1;
|
||||||
in float v_fog;
|
FSIN float v_fog;
|
||||||
|
|
||||||
out vec4 color;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
main(void)
|
main(void)
|
||||||
@ -16,10 +14,12 @@ main(void)
|
|||||||
vec4 t0 = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
vec4 t0 = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
||||||
vec4 t1 = texture(tex1, vec2(v_tex1.x, 1.0-v_tex1.y));
|
vec4 t1 = texture(tex1, vec2(v_tex1.x, 1.0-v_tex1.y));
|
||||||
|
|
||||||
color = t0*v_color*(1 + u_lightMap*(2*t1-1));
|
vec4 color = t0*v_color*(1.0 + u_lightMap*(2.0*t1-1.0));
|
||||||
color.a = v_color.a*t0.a*u_lightMap.a;
|
color.a = v_color.a*t0.a*u_lightMap.a;
|
||||||
|
|
||||||
color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);
|
color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);
|
||||||
DoAlphaTest(color.a);
|
DoAlphaTest(color.a);
|
||||||
|
|
||||||
|
FRAGCOLOR(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
27
src/extras/shaders/neoWorldIII_fs_gl.inc
Normal file
27
src/extras/shaders/neoWorldIII_fs_gl.inc
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
const char *neoWorldIII_frag_src =
|
||||||
|
"uniform sampler2D tex0;\n"
|
||||||
|
"uniform sampler2D tex1;\n"
|
||||||
|
|
||||||
|
"uniform vec4 u_lightMap;\n"
|
||||||
|
|
||||||
|
"FSIN vec4 v_color;\n"
|
||||||
|
"FSIN vec2 v_tex0;\n"
|
||||||
|
"FSIN vec2 v_tex1;\n"
|
||||||
|
"FSIN float v_fog;\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 t0 = texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
|
||||||
|
" vec4 t1 = texture(tex1, vec2(v_tex1.x, 1.0-v_tex1.y));\n"
|
||||||
|
|
||||||
|
" vec4 color = t0*v_color*(1.0 + u_lightMap*(2.0*t1-1.0));\n"
|
||||||
|
" color.a = v_color.a*t0.a*u_lightMap.a;\n"
|
||||||
|
|
||||||
|
" color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);\n"
|
||||||
|
" DoAlphaTest(color.a);\n"
|
||||||
|
|
||||||
|
" FRAGCOLOR(color);\n"
|
||||||
|
"}\n"
|
||||||
|
|
||||||
|
;
|
@ -1,16 +1,17 @@
|
|||||||
uniform sampler2D tex0;
|
uniform sampler2D tex0;
|
||||||
|
|
||||||
in vec4 v_color;
|
FSIN vec4 v_color;
|
||||||
in vec2 v_tex0;
|
FSIN vec2 v_tex0;
|
||||||
in float v_fog;
|
FSIN float v_fog;
|
||||||
|
|
||||||
out vec4 color;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
|
vec4 color;
|
||||||
color = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
color = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));
|
||||||
color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);
|
color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);
|
||||||
DoAlphaTest(color.a);
|
DoAlphaTest(color.a);
|
||||||
|
|
||||||
|
FRAGCOLOR(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
19
src/extras/shaders/simple_fs_gl.inc
Normal file
19
src/extras/shaders/simple_fs_gl.inc
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
const char *simple_frag_src =
|
||||||
|
"uniform sampler2D tex0;\n"
|
||||||
|
|
||||||
|
"FSIN vec4 v_color;\n"
|
||||||
|
"FSIN vec2 v_tex0;\n"
|
||||||
|
"FSIN float v_fog;\n"
|
||||||
|
|
||||||
|
"void\n"
|
||||||
|
"main(void)\n"
|
||||||
|
"{\n"
|
||||||
|
" vec4 color;\n"
|
||||||
|
" color = v_color*texture(tex0, vec2(v_tex0.x, 1.0-v_tex0.y));\n"
|
||||||
|
" color.rgb = mix(u_fogColor.rgb, color.rgb, v_fog);\n"
|
||||||
|
" DoAlphaTest(color.a);\n"
|
||||||
|
|
||||||
|
" FRAGCOLOR(color);\n"
|
||||||
|
"}\n"
|
||||||
|
|
||||||
|
;
|
@ -935,16 +935,3 @@ RtCharset *RtCharsetSetColors(RtCharset * charSet, const RwRGBA * foreGround,
|
|||||||
RtCharset *RtCharsetGetDesc(RtCharset * charset, RtCharsetDesc * desc) { *desc = charset->desc; return charset; }
|
RtCharset *RtCharsetGetDesc(RtCharset * charset, RtCharsetDesc * desc) { *desc = charset->desc; return charset; }
|
||||||
RtCharset *RtCharsetCreate(const RwRGBA * foreGround, const RwRGBA * backGround) { return Charset::create(foreGround, backGround); }
|
RtCharset *RtCharsetCreate(const RwRGBA * foreGround, const RwRGBA * backGround) { return Charset::create(foreGround, backGround); }
|
||||||
RwBool RtCharsetDestroy(RtCharset * charSet) { charSet->destroy(); return true; }
|
RwBool RtCharsetDestroy(RtCharset * charSet) { charSet->destroy(); return true; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// fake shit
|
|
||||||
RwInt32 _rwD3D8FindCorrectRasterFormat(RwRasterType type, RwInt32 flags)
|
|
||||||
{
|
|
||||||
#ifdef RW_GL3
|
|
||||||
if(flags & (rwRASTERFORMATPAL8 | rwRASTERFORMAT8888))
|
|
||||||
return 'NOPE';
|
|
||||||
return 'YUP';
|
|
||||||
#endif
|
|
||||||
return flags & 0xF00;
|
|
||||||
}
|
|
||||||
|
@ -150,11 +150,80 @@ RwTexDictionaryGtaStreamRead2(RwStream *stream, RwTexDictionary *texDict)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef GTA_PC
|
#ifdef GTA_PC
|
||||||
#ifdef RWLIBS
|
|
||||||
extern "C" RwInt32 _rwD3D8FindCorrectRasterFormat(RwRasterType type, RwInt32 flags);
|
#ifdef LIBRW
|
||||||
#else
|
|
||||||
RwInt32 _rwD3D8FindCorrectRasterFormat(RwRasterType type, RwInt32 flags);
|
#define CAPSVERSION 0
|
||||||
|
|
||||||
|
struct GPUcaps
|
||||||
|
{
|
||||||
|
uint32 version; // so we can force regeneration easily
|
||||||
|
uint32 platform;
|
||||||
|
uint32 subplatform;
|
||||||
|
uint32 dxtSupport;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
GetGPUcaps(GPUcaps *caps)
|
||||||
|
{
|
||||||
|
caps->version = CAPSVERSION;
|
||||||
|
caps->platform = rw::platform;
|
||||||
|
caps->subplatform = 0;
|
||||||
|
caps->dxtSupport = 0;
|
||||||
|
// TODO: more later
|
||||||
|
#ifdef RW_GL3
|
||||||
|
caps->subplatform = rw::gl3::gl3Caps.gles;
|
||||||
|
caps->dxtSupport = rw::gl3::gl3Caps.dxtSupported;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef RW_D3D9
|
||||||
|
caps->dxtSupport = 1; // TODO, probably
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ReadVideoCardCapsFile(GPUcaps *caps)
|
||||||
|
{
|
||||||
|
memset(caps, 0, sizeof(GPUcaps));
|
||||||
|
|
||||||
|
int32 file = CFileMgr::OpenFile("DATA\\CAPS.DAT", "rb");
|
||||||
|
if (file != 0) {
|
||||||
|
CFileMgr::Read(file, (char*)&caps->version, 4);
|
||||||
|
CFileMgr::Read(file, (char*)&caps->platform, 4);
|
||||||
|
CFileMgr::Read(file, (char*)&caps->subplatform, 4);
|
||||||
|
CFileMgr::Read(file, (char*)&caps->dxtSupport, 4);
|
||||||
|
CFileMgr::CloseFile(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CheckVideoCardCaps(void)
|
||||||
|
{
|
||||||
|
GPUcaps caps, fcaps;
|
||||||
|
GetGPUcaps(&caps);
|
||||||
|
ReadVideoCardCapsFile(&fcaps);
|
||||||
|
return caps.version != fcaps.version ||
|
||||||
|
caps.platform != fcaps.platform ||
|
||||||
|
caps.subplatform != fcaps.subplatform ||
|
||||||
|
caps.dxtSupport != fcaps.dxtSupport;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
WriteVideoCardCapsFile(void)
|
||||||
|
{
|
||||||
|
GPUcaps caps;
|
||||||
|
GetGPUcaps(&caps);
|
||||||
|
int32 file = CFileMgr::OpenFile("DATA\\CAPS.DAT", "wb");
|
||||||
|
if (file != 0) {
|
||||||
|
CFileMgr::Write(file, (char*)&caps.version, 4);
|
||||||
|
CFileMgr::Write(file, (char*)&caps.platform, 4);
|
||||||
|
CFileMgr::Write(file, (char*)&caps.subplatform, 4);
|
||||||
|
CFileMgr::Write(file, (char*)&caps.dxtSupport, 4);
|
||||||
|
CFileMgr::CloseFile(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
extern "C" RwInt32 _rwD3D8FindCorrectRasterFormat(RwRasterType type, RwInt32 flags);
|
||||||
void
|
void
|
||||||
ReadVideoCardCapsFile(uint32 &cap32, uint32 &cap24, uint32 &cap16, uint32 &cap8)
|
ReadVideoCardCapsFile(uint32 &cap32, uint32 &cap24, uint32 &cap16, uint32 &cap8)
|
||||||
{
|
{
|
||||||
@ -201,6 +270,7 @@ WriteVideoCardCapsFile(void)
|
|||||||
CFileMgr::CloseFile(file);
|
CFileMgr::CloseFile(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
ConvertingTexturesScreen(uint32 num, uint32 count, const char *text)
|
ConvertingTexturesScreen(uint32 num, uint32 count, const char *text)
|
||||||
@ -281,6 +351,13 @@ CreateTxdImageForVideoCard()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef LIBRW
|
||||||
|
// so we can read back DXT with GLES
|
||||||
|
// only works for textures that are not yet loaded
|
||||||
|
// so let's hope that is the case for all
|
||||||
|
rw::gl3::needToReadBackTextures = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
int32 i;
|
int32 i;
|
||||||
for (i = 0; i < TXDSTORESIZE; i++) {
|
for (i = 0; i < TXDSTORESIZE; i++) {
|
||||||
ConvertingTexturesScreen(i, TXDSTORESIZE, "CVT_MSG");
|
ConvertingTexturesScreen(i, TXDSTORESIZE, "CVT_MSG");
|
||||||
@ -308,6 +385,9 @@ CreateTxdImageForVideoCard()
|
|||||||
delete []buf;
|
delete []buf;
|
||||||
delete pDir;
|
delete pDir;
|
||||||
CStreaming::RemoveTxd(i);
|
CStreaming::RemoveTxd(i);
|
||||||
|
#ifdef LIBRW
|
||||||
|
rw::gl3::needToReadBackTextures = false;
|
||||||
|
#endif
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -334,6 +414,10 @@ CreateTxdImageForVideoCard()
|
|||||||
RwStreamClose(img, nil);
|
RwStreamClose(img, nil);
|
||||||
delete []buf;
|
delete []buf;
|
||||||
|
|
||||||
|
#ifdef LIBRW
|
||||||
|
rw::gl3::needToReadBackTextures = false;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!pDir->WriteDirFile("models\\txd.dir")) {
|
if (!pDir->WriteDirFile("models\\txd.dir")) {
|
||||||
DealWithTxdWriteError(i, TXDSTORESIZE, "CVT_ERR");
|
DealWithTxdWriteError(i, TXDSTORESIZE, "CVT_ERR");
|
||||||
delete pDir;
|
delete pDir;
|
||||||
|
2
vendor/librw
vendored
2
vendor/librw
vendored
@ -1 +1 @@
|
|||||||
Subproject commit 7e80d45cdb6663f97d89ed443198ce6e37c4435e
|
Subproject commit 4ac67e5df87da7d94725789cedad2b69e8687007
|
Loading…
Reference in New Issue
Block a user