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

📄 vertexprogram.cpp

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

#include "stdafx.h"
#include "shadow.h"
#include "extgl.h"
#include "VertexProgram.h"

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

////////////////////////////////////////////////////////////////////////////////////////////////////
// This is the actual vertex program. For more information on what these instructions do
// refere to NVIDIA's website. There are numberous Docs on this specification.
//////////////////////////////////
///////Latest Date: 2003/10/22
///////Youquan Liu
///////Use this class to manage the whole vertex shader

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

	glEnable(GL_VERTEX_PROGRAM_NV);
	glGenProgramsNV(1, &ShaderID);	
	glBindProgramNV(GL_VERTEX_PROGRAM_NV, ShaderID);
	glLoadProgramNV(GL_VERTEX_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 Vertex Program <%s>, Error at position: %d\nError Content:\n   %s\n",ShaderFile, errPos, errString);
		AfxMessageBox(Msg);
		return;
	}

	delete[] stringShader;
	stringShader = NULL;
	return;
}

////Vertex Shader in ARB
/////Load in the shader string from a file to define the whole vertex program
void LoadVertexARBProgramFromFile(char *ShaderFile, unsigned int &ShaderID)
{
	FILE *fp;
	if((fp = fopen(ShaderFile,"rb")) == NULL)
	{
		CString Msg;
		Msg.Format("Error to read in the Vertex Program file <%s>",ShaderFile);
		AfxMessageBox(Msg);
		return;
	}
	fseek(fp, 0, SEEK_END);	
	int stringLength = ftell(fp);	
	fseek(fp, 0, SEEK_SET);	
	unsigned char* stringShader = new unsigned char[stringLength + 1];
	fread(stringShader, 1, stringLength, fp);	
	stringShader[stringLength] = '\0';	
	fclose(fp);	

	glEnable(GL_VERTEX_PROGRAM_ARB);
	glGenProgramsARB(1, &ShaderID);	
	glBindProgramARB(GL_VERTEX_PROGRAM_ARB, ShaderID);	
	glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, 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("Vertex Program error at position: %d\nError Content:%s\n",errPos, errString);
		AfxMessageBox(Msg);
		return;
	}

	delete[] stringShader;
	stringShader = NULL;
	return;
}

⌨️ 快捷键说明

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