OpenGLでMultiRenderTarget

OpenGLでマルチレンダーターゲットを行うためのメモ

※OpenGLの拡張機能を使用しています


OpenGLでMulti Render Target

 void init() 
 {
   	//テクスチャのバインド
   	glGenTextures( 2, texture );
   	glBindTexture( GL_TEXTURE_2D, texture[0] );
   	
    	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
    	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
    	
    	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, 640, 480, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0 );
    	
    	glBindTexture( GL_TEXTURE_2D, texture[1] );
    	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
    	glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
    	
    	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, 640, 480, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0 );
    	glBindTexture( GL_TEXTURE_2D, 0 );
    	
    	glGenFramebuffersEXT( 1, &fbo );
    	glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbo );
    	//ここ重要
    	//テクスチャ1をアタッチ
    	glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texture[0], 0 );
    	//テクスチャ2をアタッチ
    	glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, texture[1], 0 );
    
    	glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );
 }
 //以下描画関数
 void draw() 
 {
   	
    	glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbo );
    	//ここも重要
    	unsigned int attachments[] = {GL_COLOR_ATTACHMENT0_EXT,GL_COLOR_ATTACHMENT1_EXT};
    	glDrawBuffers( 2, attachments );
    
   	glViewport( 0, 0, 640, 480 );
    	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
   
    	//フラグメントシェーダーを使用して描画
    
    	glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );
 }
最終更新:2009年01月29日 23:54
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。