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

📄 shadergl.cpp

📁 hl2 source code. Do not use it illegal.
💻 CPP
字号:
//=========== (C) Copyright 1999 Valve, L.L.C. All rights reserved. ===========
//
// The copyright to the contents herein is the property of Valve, L.L.C.
// The contents may be used and/or copied only with the written permission of
// Valve, L.L.C., or in accordance with the terms and conditions stipulated in
// the agreement/contract under which the contents have been supplied.
//
// Purpose: 
//
// $Workfile:     $
// $Date:         $
//
//-----------------------------------------------------------------------------
// $Log: $
//
// $NoKeywords: $
//=============================================================================

#include "ShaderGL.h"
#include <assert.h>

// code from nvidia bump demo

extern "C" {
/* ARB_multitexture command function pointers */
PFNGLMULTITEXCOORD2IARBPROC glMultiTexCoord2iARB;
PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3fARB;
PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
PFNGLMULTITEXCOORD3FVARBPROC glMultiTexCoord3fvARB;
PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;

/* NV_register_combiners command function pointers */
PFNGLCOMBINERPARAMETERFVNVPROC glCombinerParameterfvNV;
PFNGLCOMBINERPARAMETERIVNVPROC glCombinerParameterivNV;
PFNGLCOMBINERPARAMETERFNVPROC glCombinerParameterfNV;
PFNGLCOMBINERPARAMETERINVPROC glCombinerParameteriNV;
PFNGLCOMBINERINPUTNVPROC glCombinerInputNV;
PFNGLCOMBINEROUTPUTNVPROC glCombinerOutputNV;
PFNGLFINALCOMBINERINPUTNVPROC glFinalCombinerInputNV;
PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC glGetCombinerInputParameterfvNV;
PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC glGetCombinerInputParameterivNV;
PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC glGetCombinerOutputParameterfvNV;
PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC glGetCombinerOutputParameterivNV;
PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC glGetFinalCombinerInputfvNV;
PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC glGetFinalCombinerInputivNV;

/* WGL_EXT_swap_control command function pointers */
PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT;
PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT;

/* GL_EXT_secondary_color */
PFNGLSECONDARYCOLOR3FEXTPROC glSecondaryColor3fEXT;
}

/*** OPENGL INITIALIZATION AND CHECKS ***/

/* Check if required extensions exist. */
// undone: check which extensions exist.
static void InitGLExtensions(void)
{
	/* Retrieve some ARB_multitexture routines. */
	glMultiTexCoord2iARB =
		(PFNGLMULTITEXCOORD2IARBPROC)
		wglGetProcAddress("glMultiTexCoord2iARB");
	glMultiTexCoord3fARB =
		(PFNGLMULTITEXCOORD3FARBPROC)
		wglGetProcAddress("glMultiTexCoord3fARB");
	glMultiTexCoord3fvARB =
		(PFNGLMULTITEXCOORD3FVARBPROC)
		wglGetProcAddress("glMultiTexCoord3fvARB");
	glMultiTexCoord2fARB = 
		(PFNGLMULTITEXCOORD2FARBPROC) 
		wglGetProcAddress( "glMultiTexCoord2fARB" );
	glActiveTextureARB =
		(PFNGLACTIVETEXTUREARBPROC)
		wglGetProcAddress("glActiveTextureARB");
	
	/* Retrieve all NV_register_combiners routines. */
	glCombinerParameterfvNV =
		(PFNGLCOMBINERPARAMETERFVNVPROC)
		wglGetProcAddress("glCombinerParameterfvNV");
	glCombinerParameterivNV =
		(PFNGLCOMBINERPARAMETERIVNVPROC)
		wglGetProcAddress("glCombinerParameterivNV");
	glCombinerParameterfNV =
		(PFNGLCOMBINERPARAMETERFNVPROC)
		wglGetProcAddress("glCombinerParameterfNV");
	glCombinerParameteriNV =
		(PFNGLCOMBINERPARAMETERINVPROC)
		wglGetProcAddress("glCombinerParameteriNV");
	glCombinerInputNV =
		(PFNGLCOMBINERINPUTNVPROC)
		wglGetProcAddress("glCombinerInputNV");
	glCombinerOutputNV =
		(PFNGLCOMBINEROUTPUTNVPROC)
		wglGetProcAddress("glCombinerOutputNV");
	glFinalCombinerInputNV =
		(PFNGLFINALCOMBINERINPUTNVPROC)
		wglGetProcAddress("glFinalCombinerInputNV");
	glGetCombinerInputParameterfvNV =
		(PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC)
		wglGetProcAddress("glGetCombinerInputParameterfvNV");
	glGetCombinerInputParameterivNV =
		(PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC)
		wglGetProcAddress("glGetCombinerInputParameterivNV");
	glGetCombinerOutputParameterfvNV =
		(PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC)
		wglGetProcAddress("glGetCombinerOutputParameterfvNV");
	glGetCombinerOutputParameterivNV =
		(PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC)
		wglGetProcAddress("glGetCombinerOutputParameterivNV");
	glGetFinalCombinerInputfvNV =
		(PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC)
		wglGetProcAddress("glGetFinalCombinerInputfvNV");
	glGetFinalCombinerInputivNV =
		(PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC)
		wglGetProcAddress("glGetFinalCombinerInputivNV");
	
	wglSwapIntervalEXT = 
		(PFNWGLSWAPINTERVALEXTPROC)
		wglGetProcAddress("wglSwapIntervalEXT");
	wglGetSwapIntervalEXT = 
		(PFNWGLGETSWAPINTERVALEXTPROC)
		wglGetProcAddress("wglGetSwapIntervalEXT");

	/* GL_EXT_secondary_color */
#if 0
	glSecondaryColor3fEXT = (PFNGLSECONDARYCOLOR3FEXTPROC)
		wglGetProcAddress( "glSecondaryColor3fEXT" );
	assert( glSecondaryColor3fEXT );
#endif
}

static void CheckDestinationAlphaSupport( void )
{
	GLint alphaBits;
	
	glGetIntegerv(GL_ALPHA_BITS, &alphaBits);
	if (alphaBits > 0) 
	{
//		supportSpecular = 1;
	} 
	else 
	{
		OutputDebugString("\nnpeturb: Specular effects disabled due to lack of alpha buffer.\n");
		OutputDebugString("         Try switching to 32-bit True Color mode and restart.\n");
		assert( 0 ); // hack
	}
}

void InitGL( void )
{
	InitGLExtensions();
	CheckDestinationAlphaSupport();
}

⌨️ 快捷键说明

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