Implement Blur mode and embed shaders
This commit is contained in:
parent
2b56d31610
commit
09d3cacf9c
@ -191,3 +191,16 @@ void ogl_blit(int x, int y, int w, int h, pixel *src, int pitch, int scale);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef INCLUDE_SHADERS
|
||||||
|
const char * fragment = "uniform sampler2D fireAlpha;\
|
||||||
|
void main () {\
|
||||||
|
vec4 texColor = texture2D(fireAlpha, gl_PointCoord);\
|
||||||
|
gl_FragColor = vec4(gl_Color.rgb, texColor.a*gl_Color.a);\
|
||||||
|
}";
|
||||||
|
const char * vertex = "void main(void)\
|
||||||
|
{\
|
||||||
|
gl_Position = ftransform();;\
|
||||||
|
gl_FrontColor = gl_Color;\
|
||||||
|
}";
|
||||||
|
#endif
|
||||||
|
@ -73,11 +73,10 @@ int graphics_DEUT(GRAPHICS_FUNC_ARGS)
|
|||||||
{
|
{
|
||||||
if(parts[i].life>=700)
|
if(parts[i].life>=700)
|
||||||
{
|
{
|
||||||
*firea = 20;
|
*colr += parts[i].life*1;
|
||||||
*firer = *fireg = *fireb = 255;
|
*colg += parts[i].life*2;
|
||||||
|
*colb += parts[i].life*3;
|
||||||
*pixel_mode |= FIRE_ADD;
|
*pixel_mode |= PMODE_GLOW;
|
||||||
*pixel_mode &= ~PMODE;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include <defines.h>
|
#include <defines.h>
|
||||||
#include <air.h>
|
#include <air.h>
|
||||||
#include <powder.h>
|
#include <powder.h>
|
||||||
|
#define INCLUDE_SHADERS
|
||||||
#include <graphics.h>
|
#include <graphics.h>
|
||||||
#include <powdergraphics.h>
|
#include <powdergraphics.h>
|
||||||
#define INCLUDE_FONTDATA
|
#define INCLUDE_FONTDATA
|
||||||
@ -26,7 +27,7 @@ unsigned cmode = CM_FIRE;
|
|||||||
SDL_Surface *sdl_scrn;
|
SDL_Surface *sdl_scrn;
|
||||||
int sdl_scale = 1;
|
int sdl_scale = 1;
|
||||||
|
|
||||||
GLuint vidBuf, airBuf, fireAlpha, glowAlpha, fireProg;
|
GLuint vidBuf, airBuf, fireAlpha, glowAlpha, blurAlpha, fireProg;
|
||||||
|
|
||||||
int sandcolour_r = 0;
|
int sandcolour_r = 0;
|
||||||
int sandcolour_g = 0;
|
int sandcolour_g = 0;
|
||||||
@ -1824,7 +1825,7 @@ void render_parts(pixel *vid)
|
|||||||
// -- END FLAT -- //
|
// -- END FLAT -- //
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cglow)
|
if(cglow || cblur)
|
||||||
{
|
{
|
||||||
// -- BEGIN GLOW -- //
|
// -- BEGIN GLOW -- //
|
||||||
//Start and prepare fire program
|
//Start and prepare fire program
|
||||||
@ -1846,13 +1847,28 @@ void render_parts(pixel *vid)
|
|||||||
|
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
|
||||||
|
|
||||||
glColorPointer(4, GL_FLOAT, 0, &glowC[0]);
|
if(cglow)
|
||||||
glVertexPointer(2, GL_INT, 0, &glowV[0]);
|
{
|
||||||
|
glColorPointer(4, GL_FLOAT, 0, &glowC[0]);
|
||||||
|
glVertexPointer(2, GL_INT, 0, &glowV[0]);
|
||||||
|
|
||||||
glDrawArrays(GL_POINTS, 0, cglow);
|
glDrawArrays(GL_POINTS, 0, cglow);
|
||||||
|
}
|
||||||
|
|
||||||
|
glPointSize(7.0f);
|
||||||
|
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
if(cblur)
|
||||||
|
{
|
||||||
|
glBindTexture(GL_TEXTURE_2D, blurAlpha);
|
||||||
|
|
||||||
|
glColorPointer(4, GL_FLOAT, 0, &blurC[0]);
|
||||||
|
glVertexPointer(2, GL_INT, 0, &blurV[0]);
|
||||||
|
|
||||||
|
glDrawArrays(GL_POINTS, 0, cblur);
|
||||||
|
}
|
||||||
|
|
||||||
//Clear some stuff we set
|
//Clear some stuff we set
|
||||||
glDisable(GL_POINT_SPRITE);
|
glDisable(GL_POINT_SPRITE);
|
||||||
glDisable(GL_VERTEX_PROGRAM_POINT_SIZE);
|
glDisable(GL_VERTEX_PROGRAM_POINT_SIZE);
|
||||||
@ -2432,6 +2448,7 @@ void prepare_alpha(int size, float intensity)
|
|||||||
float temp[CELL*3][CELL*3];
|
float temp[CELL*3][CELL*3];
|
||||||
float fire_alphaf[CELL*3][CELL*3];
|
float fire_alphaf[CELL*3][CELL*3];
|
||||||
float glow_alphaf[11][11];
|
float glow_alphaf[11][11];
|
||||||
|
float blur_alphaf[7][7];
|
||||||
memset(temp, 0, sizeof(temp));
|
memset(temp, 0, sizeof(temp));
|
||||||
for (x=0; x<CELL; x++)
|
for (x=0; x<CELL; x++)
|
||||||
for (y=0; y<CELL; y++)
|
for (y=0; y<CELL; y++)
|
||||||
@ -2482,6 +2499,27 @@ void prepare_alpha(int size, float intensity)
|
|||||||
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 11, 11, GL_ALPHA, GL_FLOAT, glow_alphaf);
|
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 11, 11, GL_ALPHA, GL_FLOAT, glow_alphaf);
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
|
||||||
|
c = 3;
|
||||||
|
|
||||||
|
for (x=-3; x<4; x++)
|
||||||
|
{
|
||||||
|
for (y=-3; y<4; y++)
|
||||||
|
{
|
||||||
|
if (abs(x)+abs(y) <2 && !(abs(x)==2||abs(y)==2))
|
||||||
|
blur_alphaf[c+x][c-y] = 0.11f;
|
||||||
|
if (abs(x)+abs(y) <=3 && abs(x)+abs(y))
|
||||||
|
blur_alphaf[c+x][c-y] = 0.08f;
|
||||||
|
if (abs(x)+abs(y) == 2)
|
||||||
|
blur_alphaf[c+x][c-y] = 0.04f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, blurAlpha);
|
||||||
|
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 7, 7, GL_ALPHA, GL_FLOAT, blur_alphaf);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3045,6 +3083,17 @@ int sdl_open(void)
|
|||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
glGenTextures(1, &blurAlpha);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, blurAlpha);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 7, 7, 0, GL_ALPHA, GL_FLOAT, NULL);
|
||||||
|
|
||||||
|
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
|
||||||
loadShaders();
|
loadShaders();
|
||||||
#else
|
#else
|
||||||
#ifdef PIX16
|
#ifdef PIX16
|
||||||
@ -3083,7 +3132,7 @@ int sdl_open(void)
|
|||||||
void loadShaders()
|
void loadShaders()
|
||||||
{
|
{
|
||||||
GLuint vsize, fsize, vertexShader, fragmentShader;
|
GLuint vsize, fsize, vertexShader, fragmentShader;
|
||||||
const char *vertex = file_load("test.vert", &vsize), * fragment = file_load("test.frag", &fsize);
|
//const char *vertex = file_load("test.vert", &vsize), * fragment = file_load("test.frag", &fsize);
|
||||||
|
|
||||||
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
||||||
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||||
|
Reference in New Issue
Block a user