Advertisement
Guest User

intro.cpp

a guest
Sep 25th, 2012
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.14 KB | None | 0 0
  1. #define WIN32_LEAN_AND_MEAN
  2. #define WIN32_EXTRA_LEAN
  3.  
  4. #include <windows.h>
  5. #include <mmsystem.h>
  6. #include <GL/gl.h>
  7. #include <GL/glu.h>
  8. #include <GL/glu.h>
  9. #include <math.h>
  10. #include <stdio.h>
  11. #include "shader.h"
  12. #include "glext.h"
  13.  
  14. #define DEBUG 1
  15. #define XRES 1024
  16. #define YRES 720
  17. #define FULLSCREEN 0
  18. #define X 0
  19. #define Y 1
  20.  
  21. PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
  22. PFNGLCREATESHADERPROC glCreateShader = NULL;
  23. PFNGLSHADERSOURCEPROC glShaderSource = NULL;
  24. PFNGLCOMPILESHADERPROC glCompileShader = NULL;
  25. PFNGLATTACHSHADERPROC glAttachShader = NULL;
  26. PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = NULL;
  27. PFNGLLINKPROGRAMPROC glLinkProgram = NULL;
  28. PFNGLUSEPROGRAMPROC glUseProgram = NULL;
  29. PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = NULL;
  30. PFNGLUNIFORM1FPROC glUniform1f = NULL;
  31. PFNGLUNIFORM2FPROC glUniform2f = NULL;
  32. PFNGLUNIFORM3FPROC glUniform3f = NULL;
  33. PFNGLUNIFORM1DPROC glUniform1d = NULL;
  34. PFNGLUNIFORM2DPROC glUniform2d = NULL;
  35. PFNGLUNIFORM1IPROC glUniform1i = NULL;
  36. PFNGLUNIFORM3FVPROC glUniform3fv = NULL;
  37. PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = NULL;
  38. PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers = NULL;
  39. PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = NULL;
  40. PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer = NULL;
  41. PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers = NULL;
  42. PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers = NULL;
  43. PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer = NULL;
  44. PFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer = NULL;
  45. PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage = NULL;
  46. PFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer = NULL;
  47. PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D = NULL;
  48.  
  49. static const PIXELFORMATDESCRIPTOR pfd = {
  50.   sizeof(PIXELFORMATDESCRIPTOR),1,PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,PFD_TYPE_RGBA,
  51.   32,0,0,0,0,0,0,8,0,0,0,0,0,0,32,0,0,PFD_MAIN_PLANE,0,0,0,0
  52. };
  53.  
  54. static DEVMODE screenSettings = {
  55.   {0},
  56.   0,0,156,0,0x001c0000,{0},0,0,0,0,0,{0},0,32,XRES,YRES,{0},0,
  57.   0,0,0,0,0,0,
  58.   0,0
  59. };
  60.  
  61. static int glsl_program;
  62. static int frag_shader;
  63. static int last_frame = 0;
  64. static int frame_count = 0;
  65. static long t_last = 0;
  66. static long frame_ticker = 0;
  67. static float R = (float)XRES/YRES;
  68. static GLuint fbo;
  69. static GLuint rb;
  70. static GLuint tex;
  71.  
  72. void bind_gl_extensions()
  73. {
  74.   glCreateProgram = (PFNGLCREATEPROGRAMPROC)wglGetProcAddress("glCreateProgram");
  75.   glCreateShader = (PFNGLCREATESHADERPROC)wglGetProcAddress("glCreateShader");
  76.   glShaderSource = (PFNGLSHADERSOURCEPROC)wglGetProcAddress("glShaderSource");
  77.   glCompileShader = (PFNGLCOMPILESHADERPROC)wglGetProcAddress("glCompileShader");
  78.   glAttachShader = (PFNGLATTACHSHADERPROC)wglGetProcAddress("glAttachShader");
  79.   glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)wglGetProcAddress("glGetShaderInfoLog");
  80.   glLinkProgram = (PFNGLLINKPROGRAMPROC)wglGetProcAddress("glLinkProgram");
  81.   glUseProgram = (PFNGLUSEPROGRAMPROC)wglGetProcAddress("glUseProgram");
  82.   glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)wglGetProcAddress("glGetUniformLocation");
  83.   glUniform1f = (PFNGLUNIFORM1FPROC)wglGetProcAddress("glUniform1f");
  84.   glUniform2f = (PFNGLUNIFORM2FPROC)wglGetProcAddress("glUniform2f");
  85.   glUniform3f = (PFNGLUNIFORM3FPROC)wglGetProcAddress("glUniform3f");
  86.   glUniform1d = (PFNGLUNIFORM1DPROC)wglGetProcAddress("glUniform1d");
  87.   glUniform2d = (PFNGLUNIFORM2DPROC)wglGetProcAddress("glUniform2d");
  88.   glUniform1i = (PFNGLUNIFORM1IPROC)wglGetProcAddress("glUniform1i");
  89.   glUniform3fv = (PFNGLUNIFORM3FVPROC)wglGetProcAddress("glUniform3fv");
  90.   glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)wglGetProcAddress("glGetProgramInfoLog");
  91.   glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)wglGetProcAddress("glGenFramebuffers");
  92.   glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)wglGetProcAddress("glDeleteFramebuffers");
  93.   glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)wglGetProcAddress("glBindFramebuffer");
  94.   glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)wglGetProcAddress("glGenRenderbuffers");
  95.   glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)wglGetProcAddress("glDeleteRenderbuffers");
  96.   glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)wglGetProcAddress("glBindRenderbuffer");
  97.   glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)wglGetProcAddress("glBlitFramebuffer");
  98.   glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)wglGetProcAddress("glRenderbufferStorage");
  99.   glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)wglGetProcAddress("glFramebufferRenderbuffer");
  100.   glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)wglGetProcAddress("glFramebufferTexture2D");
  101. }
  102.  
  103. void draw_scene(float tf, float dtf)
  104. {
  105.   glBindFramebuffer(GL_FRAMEBUFFER,fbo);
  106.   glDrawBuffer(GL_COLOR_ATTACHMENT0);
  107.   glViewport(0,0,XRES/2,YRES/2);
  108.   glClearColor(0.0f,0.0f,0.0f,1.0f);
  109.  
  110.   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  111.   glUniform1f(glGetUniformLocation(glsl_program,"t"),tf);
  112.   glBegin(GL_QUADS);
  113.   glTexCoord2f(-R,-1.0f);
  114.   glVertex2f(-1.0f,-1.0f);
  115.   glTexCoord2f(R,-1.0f);
  116.   glVertex2f(1.0f,-1.0f);
  117.   glTexCoord2f(R,1.0f);
  118.   glVertex2f(1.0f,1.0f);
  119.   glTexCoord2f(-R,1.0f);
  120.   glVertex2f(-1.0f,1.0f);
  121.   glEnd();
  122.  
  123.  
  124. }
  125.  
  126. void setup_gl(void)
  127. {
  128.   glViewport(0,0,XRES,YRES);
  129.   glLoadIdentity();
  130.   glsl_program = glCreateProgram();
  131.   frag_shader = glCreateShader(GL_FRAGMENT_SHADER);
  132.   glShaderSource(frag_shader,1,&fs,0);
  133.   glCompileShader(frag_shader);
  134.   glAttachShader(glsl_program,frag_shader);
  135.   glLinkProgram(glsl_program);
  136.   glUseProgram(glsl_program);
  137.   char log[2048] = {0};
  138.   glGetShaderInfoLog(frag_shader,sizeof(log),0,log);
  139. #if DEBUG
  140.   printf("glsl program log:\n%s\n",log);
  141. #endif
  142.   glGenRenderbuffers(1,&rb);
  143.   glBindRenderbuffer(GL_RENDERBUFFER,rb);
  144.   glGenFramebuffers(1,&fbo);
  145.   glBindFramebuffer(GL_FRAMEBUFFER,fbo);
  146.   glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT,XRES/2,YRES/2);
  147.   glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,rb);
  148.   glBindFramebuffer(GL_FRAMEBUFFER, 0);
  149. }
  150.  
  151. void main ()
  152. {
  153.   long t_init = timeGetTime();
  154.   long t, dt;
  155.   float tf, dtf;
  156.   t_last = t_init;
  157. #if FULLSCREEN
  158.   if(ChangeDisplaySettings(&screenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL) return;
  159.   HWND hWnd = CreateWindow("static",0,WS_VISIBLE|WS_POPUPWINDOW|WS_MAXIMIZE,0,0,XRES,YRES,0,0,0,0);
  160. #else
  161.   int x = GetSystemMetrics(SM_CXSCREEN);
  162.   int y = GetSystemMetrics(SM_CYSCREEN);
  163.   ShowCursor(0);
  164.   HWND hWnd = CreateWindow("static",0,WS_VISIBLE|WS_POPUPWINDOW|WS_BORDER,(x-XRES)/2,(y-YRES)/2,XRES,YRES,0,0,0,0);
  165. #endif
  166.   if(!hWnd)return;
  167.   HDC hDC = GetDC(hWnd);
  168.   if(!SetPixelFormat(hDC,ChoosePixelFormat(hDC,&pfd),&pfd))return;
  169.   wglMakeCurrent(hDC,wglCreateContext(hDC));
  170.   bind_gl_extensions();
  171.   setup_gl();
  172.   do
  173.   {
  174.     t = timeGetTime();
  175.     dt = t-t_last;
  176.     t_last = t;
  177.     tf = (float)(t-t_init)/1000.0f;
  178.     dtf = (float)dt/1000.0f;
  179.     draw_scene(tf, dtf);
  180.     wglSwapLayerBuffers(hDC,WGL_SWAP_MAIN_PLANE);
  181.     frame_count++;
  182.     if(t>frame_ticker+1000)
  183.     {
  184. #if DEBUG
  185.       printf("fps=%d\n",frame_count);
  186. #endif
  187.       frame_ticker = t;
  188.       frame_count = 0;
  189.     }
  190.   }while(!GetAsyncKeyState(VK_ESCAPE));
  191.   glDeleteFramebuffers(1,&fbo);
  192.   glDeleteRenderbuffers(1,&rb);
  193.   ExitProcess(0);
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement