Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define WIN32_LEAN_AND_MEAN
- #define WIN32_EXTRA_LEAN
- #include <windows.h>
- #include <mmsystem.h>
- #include <GL/gl.h>
- #include <GL/glu.h>
- #include <GL/glu.h>
- #include <math.h>
- #include <stdio.h>
- #include "shader.h"
- #include "glext.h"
- #define DEBUG 1
- #define XRES 1024
- #define YRES 720
- #define FULLSCREEN 0
- #define X 0
- #define Y 1
- PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
- PFNGLCREATESHADERPROC glCreateShader = NULL;
- PFNGLSHADERSOURCEPROC glShaderSource = NULL;
- PFNGLCOMPILESHADERPROC glCompileShader = NULL;
- PFNGLATTACHSHADERPROC glAttachShader = NULL;
- PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = NULL;
- PFNGLLINKPROGRAMPROC glLinkProgram = NULL;
- PFNGLUSEPROGRAMPROC glUseProgram = NULL;
- PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = NULL;
- PFNGLUNIFORM1FPROC glUniform1f = NULL;
- PFNGLUNIFORM2FPROC glUniform2f = NULL;
- PFNGLUNIFORM3FPROC glUniform3f = NULL;
- PFNGLUNIFORM1DPROC glUniform1d = NULL;
- PFNGLUNIFORM2DPROC glUniform2d = NULL;
- PFNGLUNIFORM1IPROC glUniform1i = NULL;
- PFNGLUNIFORM3FVPROC glUniform3fv = NULL;
- PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = NULL;
- PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers = NULL;
- PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = NULL;
- PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer = NULL;
- PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers = NULL;
- PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers = NULL;
- PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer = NULL;
- PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer = NULL;
- PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage = NULL;
- PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer = NULL;
- PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D = NULL;
- static const PIXELFORMATDESCRIPTOR pfd = {
- sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,PFD_TYPE_RGBA,
- 32,0,0,0,0,0,0,8,0,0,0,0,0,0,32,0,0,PFD_MAIN_PLANE,0,0,0,0
- };
- static DEVMODE screenSettings = {
- {0},
- 0,0,156,0,0x001c0000,{0},0,0,0,0,0,{0},0,32,XRES,YRES,{0},0,
- 0,0,0,0,0,0,
- 0,0
- };
- static int glsl_program;
- static int frag_shader;
- static int last_frame = 0;
- static int frame_count = 0;
- static long t_last = 0;
- static long frame_ticker = 0;
- static float R = (float)XRES/YRES;
- static GLuint fbo;
- static GLuint rb;
- static GLuint tex;
- void bind_gl_extensions()
- {
- glCreateProgram = (PFNGLCREATEPROGRAMPROC)wglGetProcAddress("glCreateProgram");
- glCreateShader = (PFNGLCREATESHADERPROC)wglGetProcAddress("glCreateShader");
- glShaderSource = (PFNGLSHADERSOURCEPROC)wglGetProcAddress("glShaderSource");
- glCompileShader = (PFNGLCOMPILESHADERPROC)wglGetProcAddress("glCompileShader");
- glAttachShader = (PFNGLATTACHSHADERPROC)wglGetProcAddress("glAttachShader");
- glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)wglGetProcAddress("glGetShaderInfoLog");
- glLinkProgram = (PFNGLLINKPROGRAMPROC)wglGetProcAddress("glLinkProgram");
- glUseProgram = (PFNGLUSEPROGRAMPROC)wglGetProcAddress("glUseProgram");
- glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)wglGetProcAddress("glGetUniformLocation");
- glUniform1f = (PFNGLUNIFORM1FPROC)wglGetProcAddress("glUniform1f");
- glUniform2f = (PFNGLUNIFORM2FPROC)wglGetProcAddress("glUniform2f");
- glUniform3f = (PFNGLUNIFORM3FPROC)wglGetProcAddress("glUniform3f");
- glUniform1d = (PFNGLUNIFORM1DPROC)wglGetProcAddress("glUniform1d");
- glUniform2d = (PFNGLUNIFORM2DPROC)wglGetProcAddress("glUniform2d");
- glUniform1i = (PFNGLUNIFORM1IPROC)wglGetProcAddress("glUniform1i");
- glUniform3fv = (PFNGLUNIFORM3FVPROC)wglGetProcAddress("glUniform3fv");
- glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)wglGetProcAddress("glGetProgramInfoLog");
- glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)wglGetProcAddress("glGenFramebuffers");
- glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)wglGetProcAddress("glDeleteFramebuffers");
- glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)wglGetProcAddress("glBindFramebuffer");
- glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)wglGetProcAddress("glGenRenderbuffers");
- glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)wglGetProcAddress("glDeleteRenderbuffers");
- glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)wglGetProcAddress("glBindRenderbuffer");
- glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)wglGetProcAddress("glBlitFramebuffer");
- glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)wglGetProcAddress("glRenderbufferStorage");
- glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)wglGetProcAddress("glFramebufferRenderbuffer");
- glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)wglGetProcAddress("glFramebufferTexture2D");
- }
- void draw_scene(float tf, float dtf)
- {
- glBindFramebuffer(GL_FRAMEBUFFER,fbo);
- glDrawBuffer(GL_COLOR_ATTACHMENT0);
- glViewport(0,0,XRES/2,YRES/2);
- glClearColor(0.0f,0.0f,0.0f,1.0f);
- glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
- glUniform1f(glGetUniformLocation(glsl_program,"t"),tf);
- glBegin(GL_QUADS);
- glTexCoord2f(-R,-1.0f);
- glVertex2f(-1.0f,-1.0f);
- glTexCoord2f(R,-1.0f);
- glVertex2f(1.0f,-1.0f);
- glTexCoord2f(R,1.0f);
- glVertex2f(1.0f,1.0f);
- glTexCoord2f(-R,1.0f);
- glVertex2f(-1.0f,1.0f);
- glEnd();
- }
- void setup_gl(void)
- {
- glViewport(0,0,XRES,YRES);
- glLoadIdentity();
- glsl_program = glCreateProgram();
- frag_shader = glCreateShader(GL_FRAGMENT_SHADER);
- glShaderSource(frag_shader,1,&fs,0);
- glCompileShader(frag_shader);
- glAttachShader(glsl_program,frag_shader);
- glLinkProgram(glsl_program);
- glUseProgram(glsl_program);
- char log[2048] = {0};
- glGetShaderInfoLog(frag_shader,sizeof(log),0,log);
- #if DEBUG
- printf("glsl program log:\n%s\n",log);
- #endif
- glGenRenderbuffers(1,&rb);
- glBindRenderbuffer(GL_RENDERBUFFER,rb);
- glGenFramebuffers(1,&fbo);
- glBindFramebuffer(GL_FRAMEBUFFER,fbo);
- glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT,XRES/2,YRES/2);
- glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,rb);
- glBindFramebuffer(GL_FRAMEBUFFER, 0);
- }
- void main ()
- {
- long t_init = timeGetTime();
- long t, dt;
- float tf, dtf;
- t_last = t_init;
- #if FULLSCREEN
- if(ChangeDisplaySettings(&screenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL) return;
- HWND hWnd = CreateWindow("static",0,WS_VISIBLE|WS_POPUPWINDOW|WS_MAXIMIZE,0,0,XRES,YRES,0,0,0,0);
- #else
- int x = GetSystemMetrics(SM_CXSCREEN);
- int y = GetSystemMetrics(SM_CYSCREEN);
- ShowCursor(0);
- HWND hWnd = CreateWindow("static",0,WS_VISIBLE|WS_POPUPWINDOW|WS_BORDER,(x-XRES)/2,(y-YRES)/2,XRES,YRES,0,0,0,0);
- #endif
- if(!hWnd)return;
- HDC hDC = GetDC(hWnd);
- if(!SetPixelFormat(hDC,ChoosePixelFormat(hDC,&pfd),&pfd))return;
- wglMakeCurrent(hDC,wglCreateContext(hDC));
- bind_gl_extensions();
- setup_gl();
- do
- {
- t = timeGetTime();
- dt = t-t_last;
- t_last = t;
- tf = (float)(t-t_init)/1000.0f;
- dtf = (float)dt/1000.0f;
- draw_scene(tf, dtf);
- wglSwapLayerBuffers(hDC,WGL_SWAP_MAIN_PLANE);
- frame_count++;
- if(t>frame_ticker+1000)
- {
- #if DEBUG
- printf("fps=%d\n",frame_count);
- #endif
- frame_ticker = t;
- frame_count = 0;
- }
- }while(!GetAsyncKeyState(VK_ESCAPE));
- glDeleteFramebuffers(1,&fbo);
- glDeleteRenderbuffers(1,&rb);
- ExitProcess(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement