mirror of
https://github.com/CTCaer/RetroArch.git
synced 2024-12-16 07:16:36 +00:00
Loads in vertex program as well.
This commit is contained in:
parent
43660dad6d
commit
42dc761cac
33
gl.c
33
gl.c
@ -45,14 +45,15 @@ static const GLfloat tex_coords[] = {
|
||||
};
|
||||
|
||||
static bool keep_aspect = true;
|
||||
static CGparameter cg_mvp_matrix;
|
||||
typedef struct gl
|
||||
{
|
||||
bool vsync;
|
||||
unsigned real_x;
|
||||
unsigned real_y;
|
||||
#ifdef HAVE_CG
|
||||
CGcontext cgCtx;
|
||||
CGprogram cgPrg;
|
||||
CGprogram cgFPrg;
|
||||
CGprogram cgVPrg;
|
||||
CGprofile cgFProf;
|
||||
CGprofile cgVProf;
|
||||
CGparameter cg_video_size, cg_texture_size;
|
||||
#endif
|
||||
@ -188,6 +189,7 @@ static void GLFWCALL resize(int width, int height)
|
||||
glOrtho(0, 1, 0, 1, -1, 1);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
cgGLSetStateMatrixParameter(cg_mvp_matrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
|
||||
}
|
||||
|
||||
static float tv_to_fps(const struct timeval *tv, const struct timeval *new_tv, int frames)
|
||||
@ -334,27 +336,34 @@ static void* gl_init(video_info_t *video, const input_driver_t **input)
|
||||
fprintf(stderr, "Failed to create Cg context\n");
|
||||
goto error;
|
||||
}
|
||||
gl->cgVProf = cgGLGetLatestProfile(CG_GL_FRAGMENT);
|
||||
if (gl->cgVProf == CG_PROFILE_UNKNOWN)
|
||||
gl->cgFProf = cgGLGetLatestProfile(CG_GL_FRAGMENT);
|
||||
gl->cgVProf = cgGLGetLatestProfile(CG_GL_VERTEX);
|
||||
if (gl->cgFProf == CG_PROFILE_UNKNOWN || gl->cgVProf == CG_PROFILE_UNKNOWN)
|
||||
{
|
||||
fprintf(stderr, "Invalid profile type\n");
|
||||
goto error;
|
||||
}
|
||||
cgGLSetOptimalOptions(gl->cgFProf);
|
||||
cgGLSetOptimalOptions(gl->cgVProf);
|
||||
gl->cgPrg = cgCreateProgramFromFile(gl->cgCtx, CG_SOURCE, cg_shader_path, gl->cgVProf, "main", 0);
|
||||
if (gl->cgPrg == NULL)
|
||||
gl->cgFPrg = cgCreateProgramFromFile(gl->cgCtx, CG_SOURCE, cg_shader_path, gl->cgFProf, "main_fragment", 0);
|
||||
gl->cgVPrg = cgCreateProgramFromFile(gl->cgCtx, CG_SOURCE, cg_shader_path, gl->cgVProf, "main_vertex", 0);
|
||||
if (gl->cgFPrg == NULL || gl->cgVPrg == NULL)
|
||||
{
|
||||
CGerror err = cgGetError();
|
||||
fprintf(stderr, "CG error: %s\n", cgGetErrorString(err));
|
||||
goto error;
|
||||
}
|
||||
cgGLLoadProgram(gl->cgPrg);
|
||||
cgGLLoadProgram(gl->cgFPrg);
|
||||
cgGLLoadProgram(gl->cgVPrg);
|
||||
cgGLEnableProfile(gl->cgFProf);
|
||||
cgGLEnableProfile(gl->cgVProf);
|
||||
cgGLBindProgram(gl->cgPrg);
|
||||
|
||||
gl->cg_video_size = cgGetNamedParameter(gl->cgPrg, "IN.video_size");
|
||||
gl->cg_texture_size = cgGetNamedParameter(gl->cgPrg, "IN.texture_size");
|
||||
cgGLBindProgram(gl->cgFPrg);
|
||||
cgGLBindProgram(gl->cgVPrg);
|
||||
|
||||
gl->cg_video_size = cgGetNamedParameter(gl->cgFPrg, "IN.video_size");
|
||||
gl->cg_texture_size = cgGetNamedParameter(gl->cgFPrg, "IN.texture_size");
|
||||
cg_mvp_matrix = cgGetNamedParameter(gl->cgVPrg, "modelViewProj");
|
||||
cgGLSetStateMatrixParameter(cg_mvp_matrix, CG_GL_MODELVIEW_PROJECTION_MATRIX, CG_GL_MATRIX_IDENTITY);
|
||||
#endif
|
||||
|
||||
*input = &input_glfw;
|
||||
|
25
hqflt/crt.cg
25
hqflt/crt.cg
@ -1,9 +1,27 @@
|
||||
|
||||
/* Default Vertex shader */
|
||||
void main_vertex
|
||||
(
|
||||
float4 position : POSITION,
|
||||
float4 color : COLOR,
|
||||
float2 texCoord : TEXCOORD0,
|
||||
|
||||
uniform float4x4 modelViewProj,
|
||||
|
||||
out float4 oPosition : POSITION,
|
||||
out float4 oColor : COLOR,
|
||||
out float2 otexCoord : TEXCOORD
|
||||
)
|
||||
{
|
||||
oPosition = mul(modelViewProj, position);
|
||||
oColor = color;
|
||||
otexCoord = texCoord;
|
||||
}
|
||||
|
||||
#define TEX2D(c) tex2D(decal,(c))
|
||||
#define PI 3.141592653589
|
||||
#define phase 0.0
|
||||
#define gamma 2.5
|
||||
|
||||
#define distortion 0.2
|
||||
|
||||
struct output
|
||||
@ -28,13 +46,14 @@ float2 fract(float2 v)
|
||||
return ret;
|
||||
}
|
||||
|
||||
float2 barrelDistortion(float2 coord) {
|
||||
float2 barrelDistortion(float2 coord)
|
||||
{
|
||||
float2 cc = coord - 0.5;
|
||||
float dist = dot(cc, cc);
|
||||
return coord + cc * (dist + distortion * dist * dist) * distortion;
|
||||
}
|
||||
|
||||
output main(float2 texCoord : TEXCOORD0, uniform sampler2D decal : TEXUNIT0, uniform input IN)
|
||||
output main_fragment(float2 texCoord : TEXCOORD0, uniform sampler2D decal : TEXUNIT0, uniform input IN)
|
||||
{
|
||||
output OUT;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user