⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fragmentprogram.cpp

📁 PDE simulator on GPU.
💻 CPP
字号:
// FragmentProgram.cpp: implementation of the FragmenProgram class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "shadow.h"
#include "FragmentProgram.h"
#include "extgl.h"
#include "CommonHW.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// NV_Fragment_Program
// General Purpose Computations on GPU
//////////////////////////////////////////////////////////////////////
void LoadFragmentProgramFromFile(char *ShaderFile, unsigned int &ShaderID)
{
	//////////////////////////////////////////////////////////////
	/// Load the fragment program from a text file
	FILE *fp;
	unsigned char *stringShader;

	if((fp = fopen(ShaderFile,"rb")) == NULL)
	{
		CString Msg;
		Msg.Format("Error to read in the Fragment Program file <%s>",ShaderFile);
		AfxMessageBox(Msg);
		return;
	}
  	fseek(fp, 0, SEEK_END);	
	int stringLength = ftell(fp);	
	fseek(fp, 0, SEEK_SET);	
	stringShader = new unsigned char[stringLength + 1];
	fread(stringShader, 1, stringLength, fp);	
	stringShader[stringLength] = '\0';	
	fclose(fp);	

	///////////////////////////////////////////////////////////////
	glGenProgramsNV(1, &ShaderID);	
	glBindProgramNV(GL_FRAGMENT_PROGRAM_NV, ShaderID);
	glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV, ShaderID, stringLength, stringShader);
	
	///////////////////////////////////////////////////////////////
	if(GL_INVALID_OPERATION == glGetError())
	{
		// Find the error position
		GLint errPos;
		glGetIntegerv( GL_PROGRAM_ERROR_POSITION_ARB, &errPos );

		// Print implementation-dependent program
		// errors and warnings string.
		unsigned char *errString = (unsigned char*)glGetString(GL_PROGRAM_ERROR_STRING_ARB);

		CString Msg;
		Msg.Format("When Loading Fragment Program <%s>, Error at position: %d\nError Content:\n   %s\n",ShaderFile, errPos, errString);
		AfxMessageBox(Msg);
		exit(0);
	}
	
	///////////////////////////////////////////////////////////////
	delete[] stringShader;
	stringShader = NULL;
	return;
}

void LoadFragmentProgramFromString(const unsigned char *ShaderString, unsigned int &ShaderID)
{
	int stringLength = strlen((const char*)ShaderString);	
	///////////////////////////////////////////////////////////////
	glGenProgramsNV(1, &ShaderID);	
	glBindProgramNV(GL_FRAGMENT_PROGRAM_NV, ShaderID);
	glLoadProgramNV(GL_FRAGMENT_PROGRAM_NV, ShaderID, stringLength, ShaderString);

	///////////////////////////////////////////////////////////////
	if(GL_INVALID_OPERATION == glGetError())
	{
		// Find the error position
		GLint errPos;
		glGetIntegerv( GL_PROGRAM_ERROR_POSITION_ARB, &errPos );

		// Print implementation-dependent program
		// errors and warnings string.
		unsigned char *errString = (unsigned char*)glGetString(GL_PROGRAM_ERROR_STRING_ARB);

		CString Msg;
		Msg.Format("When Loading Fragment Program String, Error at position: %d\nError Content:\n   %s\n",errPos, errString);
		AfxMessageBox(Msg);
		exit(0);
	}
	
	///////////////////////////////////////////////////////////////
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -