Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 124 additions & 0 deletions skeleton/BASE/Shaders/glsl/lcd1x.glsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
/*
lcd1x shader

A slightly tweaked version of lcd3x, original code written by Gigaherz
and released into the public domain:

> Omits LCD 'colour seperation' effect

> Has 'properly' aligned scanlines

Edited by jdgleaver

This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.
*/

#pragma parameter BRIGHTEN_SCANLINES "Brighten Scanlines" 16.0 1.0 32.0 0.5
#pragma parameter BRIGHTEN_LCD "Brighten LCD" 4.0 1.0 12.0 0.1

#if defined(VERTEX)

#if __VERSION__ >= 130
#define COMPAT_VARYING out
#define COMPAT_ATTRIBUTE in
#define COMPAT_TEXTURE texture
#else
#define COMPAT_VARYING varying
#define COMPAT_ATTRIBUTE attribute
#define COMPAT_TEXTURE texture2D
#endif

#ifdef GL_ES
#define COMPAT_PRECISION highp
#else
#define COMPAT_PRECISION
#endif

COMPAT_ATTRIBUTE vec4 VertexCoord;
COMPAT_ATTRIBUTE vec4 COLOR;
COMPAT_ATTRIBUTE vec4 TexCoord;
COMPAT_VARYING vec4 TEX0;

uniform mat4 MVPMatrix;
uniform COMPAT_PRECISION int FrameDirection;
uniform COMPAT_PRECISION int FrameCount;
uniform COMPAT_PRECISION vec2 OutputSize;
uniform COMPAT_PRECISION vec2 TextureSize;
uniform COMPAT_PRECISION vec2 InputSize;

/*
VERTEX_SHADER
*/
void main()
{
TEX0 = TexCoord * 1.0001;
gl_Position = MVPMatrix * VertexCoord;
}

#elif defined(FRAGMENT)

#if __VERSION__ >= 130
#define COMPAT_VARYING in
#define COMPAT_TEXTURE texture
out vec4 FragColor;
#else
#define COMPAT_VARYING varying
#define FragColor gl_FragColor
#define COMPAT_TEXTURE texture2D
#endif

#ifdef GL_ES
precision highp float;
precision highp int;
#define COMPAT_PRECISION highp
#else
#define COMPAT_PRECISION
#endif

uniform COMPAT_PRECISION int FrameDirection;
uniform COMPAT_PRECISION int FrameCount;
uniform COMPAT_PRECISION vec2 OrigInputSize;
uniform COMPAT_PRECISION vec2 TextureSize;
uniform COMPAT_PRECISION vec2 InputSize;
uniform COMPAT_PRECISION vec2 OutputSize;
uniform sampler2D Texture;
COMPAT_VARYING vec4 TEX0;

#ifdef PARAMETER_UNIFORM
// All parameter floats need to have COMPAT_PRECISION in front of them
uniform COMPAT_PRECISION float BRIGHTEN_SCANLINES;
uniform COMPAT_PRECISION float BRIGHTEN_LCD;
#else
#define BRIGHTEN_SCANLINES 16.0
#define BRIGHTEN_LCD 4.0
#endif

// Magic Numbers
#define PI 3.141592654

/*
FRAGMENT SHADER
*/
void main()
{
// Generate LCD grid effect
// > Note the 0.25 pixel offset -> required to ensure that
// scanlines occur *between* pixels
COMPAT_PRECISION vec2 angle =
2.0 * PI * ((TEX0.xy * OrigInputSize * TextureSize / InputSize) - 0.25);

COMPAT_PRECISION float yfactor = (BRIGHTEN_SCANLINES + sin(angle.y)) / (BRIGHTEN_SCANLINES + 1.0);
COMPAT_PRECISION float xfactor = (BRIGHTEN_LCD + sin(angle.x)) / (BRIGHTEN_LCD + 1.0);

// Get colour sample
COMPAT_PRECISION vec3 colour = COMPAT_TEXTURE(Texture, TEX0.xy).rgb;

// Apply LCD grid effect
colour.rgb = yfactor * xfactor * colour.rgb;

FragColor = vec4(colour.rgb, 1.0);
}
#endif
14 changes: 14 additions & 0 deletions workspace/all/common/api.h
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,19 @@ enum {
MODE_MAIN,
MODE_MENU,
};
#include "opengl.h"
#define MAX_PARAM_NAME 128
#define MAX_PARAM_LABEL 128
typedef struct {
char name[MAX_PARAM_NAME];
char label[MAX_PARAM_LABEL];
float def;
float min;
float max;
float step;
float value;
GLint uniformLocation;
} ShaderParam;

SDL_Surface* GFX_init(int mode);
#define GFX_resize PLAT_resizeVideo // (int w, int h, int pitch);
Expand Down Expand Up @@ -568,6 +581,7 @@ void PLAT_setShader2(const char* filename);
void PLAT_setShader3(const char* filename);
void PLAT_updateShader(int i, const char *filename, int *scale, int *filter, int *scaletype, int *inputtype);
void PLAT_initShaders();
ShaderParam* PLAT_getShaderPragmas(int i);
int PLAT_supportsOverscan(void);

SDL_Surface* PLAT_initOverlay(void);
Expand Down
Loading
Loading