video_init.c
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:4k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * video_init.c:
  3.  *****************************************************************************
  4.  * Copyright (C) 2004 the VideoLAN team
  5.  * $Id: 2cdef5d94ed95304be113cf3197dd4534b3960cc $
  6.  *
  7.  * Authors: Cyril Deguet <asmax@videolan.org>
  8.  *          code from projectM http://xmms-projectm.sourceforge.net
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24. //video_init.c - SDL/Opengl Windowing Creation/Resizing Functions
  25. //
  26. //by Peter Sperl
  27. //
  28. //Opens an SDL Window and creates an OpenGL session
  29. //also able to handle resizing and fullscreening of windows
  30. //just call init_display again with differant variables
  31. #include <stdlib.h>
  32. #include <GL/gl.h>
  33. #include <GL/glu.h>
  34. #include "video_init.h"
  35. extern int texsize;
  36. extern char *buffer;
  37. void setup_opengl( int w, int h )
  38. {
  39.    
  40.     /* Our shading model--Gouraud (smooth). */
  41.      glShadeModel( GL_SMOOTH);
  42.     /* Culling. */
  43.     //    glCullFace( GL_BACK );
  44.     //    glFrontFace( GL_CCW );
  45.     //    glEnable( GL_CULL_FACE );
  46.     /* Set the clear color. */
  47.     glClearColor( 0, 0, 0, 0 );
  48.     /* Setup our viewport. */
  49.      glViewport( 0, 0, w, h );
  50.     /*
  51.      * Change to the projection matrix and set
  52.      * our viewing volume.
  53.      */
  54.     glMatrixMode(GL_TEXTURE);
  55.     glLoadIdentity();
  56.     
  57.     //    gluOrtho2D(0.0, (GLfloat) width, 0.0, (GLfloat) height);
  58.     glMatrixMode(GL_PROJECTION);
  59.     glLoadIdentity();  
  60.    
  61.     //    glFrustum(0.0, height, 0.0,width,10,40);
  62.     glMatrixMode(GL_MODELVIEW);
  63.     glLoadIdentity();
  64. glDrawBuffer(GL_BACK); 
  65.   glReadBuffer(GL_BACK); 
  66.   glEnable(GL_BLEND); 
  67.      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
  68.      // glBlendFunc(GL_SRC_ALPHA, GL_ONE); 
  69.   glEnable(GL_LINE_SMOOTH);
  70.   glEnable(GL_POINT_SMOOTH);
  71.   glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
  72.   glClear(GL_COLOR_BUFFER_BIT);
  73.  
  74.   // glCopyTexImage2D(GL_TEXTURE_2D,0,GL_RGB,0,0,texsize,texsize,0);
  75.   //glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,texsize,texsize);
  76.    glLineStipple(2, 0xAAAA);
  77.   
  78.     
  79. }
  80. void CreateRenderTarget(int texsize,int *RenderTargetTextureID, int *RenderTarget )
  81. {
  82.     /* Create the texture that will be bound to the render target */
  83.     glGenTextures(1, RenderTargetTextureID);
  84.     glBindTexture(GL_TEXTURE_2D, *RenderTargetTextureID);
  85.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  86.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  87. #if 0
  88.     /* Create the render target */
  89.     *RenderTarget = SDL_GL_CreateRenderTarget(texsize,texsize, NULL);
  90.         if ( *RenderTarget ) {
  91.     
  92. int value;
  93. //printf("Created render target:n");
  94. SDL_GL_GetRenderTargetAttribute( *RenderTarget, SDL_GL_RED_SIZE, &value );
  95. // printf( "SDL_GL_RED_SIZE: %dn", value);
  96. SDL_GL_GetRenderTargetAttribute( *RenderTarget, SDL_GL_GREEN_SIZE, &value );
  97. // printf( "SDL_GL_GREEN_SIZE: %dn", value);
  98. SDL_GL_GetRenderTargetAttribute( *RenderTarget, SDL_GL_BLUE_SIZE, &value );
  99. // printf( "SDL_GL_BLUE_SIZE: %dn", value);
  100. SDL_GL_GetRenderTargetAttribute( *RenderTarget, SDL_GL_ALPHA_SIZE, &value );
  101. // printf( "SDL_GL_ALPHA_SIZE: %dn", value);
  102. SDL_GL_GetRenderTargetAttribute( *RenderTarget, SDL_GL_DEPTH_SIZE, &value );
  103. // printf( "SDL_GL_DEPTH_SIZE: %dn", value );
  104. SDL_GL_BindRenderTarget(*RenderTarget, *RenderTargetTextureID);
  105.        
  106.     } else {
  107. #endif
  108.         /* We can fake a render target in this demo by rendering to the
  109.          * screen and copying to a texture before we do normal rendering.
  110.          */
  111.     buffer = malloc(3*texsize*texsize);
  112.         glBindTexture(GL_TEXTURE_2D, *RenderTargetTextureID);
  113.         glTexImage2D(GL_TEXTURE_2D,
  114. 0,
  115. GL_RGB,
  116. texsize, texsize,
  117. 0,
  118. GL_RGB,
  119. GL_UNSIGNED_BYTE,
  120. buffer);
  121.  //   }
  122. }