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

📄 glbackend.rb

📁 ROBOCUP 仿真3D server 源码
💻 RB
字号:
# GLBackEnd    -*- mode: ruby; ruby-indent-level: 4 -*-## This backend generates CPP coderequire 'script/glextension.rb'require 'script/glfrontend.rb'module GLExtGen    class GLBackEnd	def initialize	end	# generate output	def generate(frontEnd, glArray, wglArray, glXArray)	    print "\n"	    generateHFile(frontEnd, glArray, wglArray, glXArray)	    generateCPPFile(frontEnd, glArray, wglArray, glXArray)	end		def writeMembers(frontEnd, file, array)	    array.each { |item|        file.print "#line 22 \"utility/glextgen/script/glbackend.rb\"\n"		file.print "	bool m", item[1].name, ";\n"	    }	end	def writeFunctions(frontEnd, file, array)	    array.each { |item|        file.print "#line 29 \"utility/glextgen/script/glbackend.rb\"\n"		file.print "	bool Has_", item[1].name, "() const { return mExtensions.m", item[1].name, "; }\n"	    }	end		def writeExternFunctionPointers(frontEnd, file, array)	    array.each { |item|		if item[1].functionList.size != 0            file.print "#line 37 \"utility/glextgen/script/glbackend.rb\"\n"		    file.print "#ifdef ", item[0], "\n"		    item[1].functionList.each { |function|			file.print "extern ", frontEnd.procize(function), " ", function, ";\n"		    }		    file.print "#endif //", item[0], "\n\n"		end	    }	end		def	writeStructFunctionPointers(frontEnd, file, array)	    array.each { |item|		if item[1].functionList.size != 0            file.print "#line 50 \"utility/glextgen/script/glbackend.rb\"\n"		    file.print "#ifdef ", item[0], "\n"		    item[1].functionList.each { |function|			file.print "	", frontEnd.procize(function), " fun_", function, ";\n"		    }		    file.print "#endif //", item[0], "\n\n"		end	    }	end		def writeStructExtensions(frontEnd, file, array)	    array.each { |item|        file.print "#line 62 \"utility/glextgen/script/glbackend.rb\"\n"		file.print "	bool m", item[1].name, ";\n"	    }	end		def copyFile(destFile, srcName)	    File.open(srcName, "r") { |srcFile|		srcFile.each_line	{ |srcLine|		    destFile.print srcLine		}	    }	end		def winGuardOn	    "#if defined(_WIN32)\n"	end	def winGuardOff	    "#endif //_WIN32\n"	end	def generateHFile(frontEnd, glArray, wglArray, glXArray)	    print "Generating 'glextensionreg.h'\n"	    File.open("glextensionreg.h", "w")	{ |f|		copyFile(f, "tocopy/header_begin.txt")        f.print "#line 87 \"utility/glextgen/script/glbackend.rb\"\n"		if $namespace != nil		    f.print "\nnamespace ", $namespace, " {\n"		end				### here we write out a struct with all possible function pointers		f.print "struct GLExtGenFunctionPointers\n{\n"		writeStructFunctionPointers(frontEnd, f, glArray)        f.print "#line 94 \"utility/glextgen/script/glbackend.rb\"\n"		f.print "	", winGuardOn		writeStructFunctionPointers(frontEnd, f, wglArray)        f.print "#line 94 \"utility/glextgen/script/glbackend.rb\"\n"		f.print "	", winGuardOff		f.print "};\n"				### here we write out all possible extensions		f.print "struct GLExtGenExtensions\n{\n"		writeStructExtensions(frontEnd, f, glArray)        f.print "#line 105 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOn		writeStructExtensions(frontEnd, f, wglArray)        f.print "#line 108 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOff		f.print "};\n"				f.print "\n"		f.print "class GLExtensionReg\n"		f.print "{\n"		f.print "private:\n"				f.print winGuardOn		f.print "	HDC	mHDC;\n"		f.print winGuardOff		### write out extension definitions for gl		f.print "	GLExtGenExtensions	mExtensions;\n\n"				f.print "public:\n"		### loop through all extensions		writeFunctions(frontEnd, f, glArray)        f.print "#line 119 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOn		writeFunctions(frontEnd, f, wglArray)        f.print "#line 123 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOff				f.print "	GLExtensionReg();\n"		f.print "	~GLExtensionReg();\n"				f.print "	void Init(GLExtGenFunctionPointers *funPtr = 0, GLExtGenExtensions *ext = 0);\n"		f.printf"	bool 	QueryGLExtension(const char *name);\n"		f.print winGuardOn		f.printf"	bool 	QueryWGLExtension(const char *name);\n"		f.print "	HDC		GetHDC() const {	return mHDC;	}\n"		f.print "	void	SetHDC(HDC hdc){	mHDC = hdc;		}\n"		f.print winGuardOff		f.print "};\n\n"				if $namespace != nil		    f.print "} // end ", $namespace, "\n\n"		end		### write out extern function pointer definitions		writeExternFunctionPointers(frontEnd, f, glArray)        f.print "#line 141 \"utility/glextgen/script/glbackend.rb\"\n"				### write out extern function pointer definitions for wgl with define-guard		f.print winGuardOn		writeExternFunctionPointers(frontEnd, f, wglArray)        f.print "#line 146 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOff		copyFile(f, "tocopy/header_end.txt")	    }	end	def writeFunctionPointers(frontEnd, file, array)	    array.each { |item|		if item[1].functionList.size != 0            file.print "#line 166 \"utility/glextgen/script/glbackend.rb\"\n"		    file.print "#ifdef ", item[0], "\n"		    item[1].functionList.each { |function|            file.print "#line 169 \"utility/glextgen/script/glbackend.rb\"\n"            file.print frontEnd.procize(function), " fun_", function, " = NULL;\n"		    }		    file.print "#endif //", item[0], "\n\n"		end	    }	end	def writeInitMembers(frontEnd, file, array)	    array.each { |item|        file.print "#line 178 \"utility/glextgen/script/glbackend.rb\"\n"		file.print "	mExtensions.m", item[0], " = false;\n"	    }	end		def writeLoadFunctions(frontEnd, file, array)	    array.each { |item|		if item[0].index("extensions_string") == nil            file.print "#line 186 \"utility/glextgen/script/glbackend.rb\"\n"		    file.print "static bool Load_", item[0], "(GLExtensionReg *reg)\n{\n"		    file.print "#ifdef ", item[0], "\n"		    # query for the extension, unless we are a GL_VERSION		    if item[0].index("VERSION") == nil			if item[0].index("WGL") == nil			    file.print "	if(reg->QueryGLExtension(\"", item[0], "\") == 0)\n"			else			    if item[0].index("WGL_NV_vertex_array_range") == nil				file.print "	if(reg->QueryWGLExtension(\"", item[0], "\") == 0)\n"			    else				file.print "	if(reg->QueryGLExtension(\"GL_NV_vertex_array_range\") == 0)\n"			    end			end			file.print "		return false;\n"		    end		    item[1].functionList.each { |function|			file.print "	GET_PROC_ADDRESS(", frontEnd.procize(function), ", fun_", function, ");\n"		    }		    file.print "	return true;\n#endif //", item[0], "\n	return false;\n}\n\n"		end	    }	end		def writeCallLoadFunctions(frontEnd, file, array)	    array.each { |item|		if item[0].index("extensions_string") == nil            file.print "#line 213 \"utility/glextgen/script/glbackend.rb\"\n"		    if item[0].index("VERSION") != nil			file.print "	if (mExtensions.m", item[0], ") Load_", item[0], "(this);\n"		    else			file.print "	mExtensions.m", item[0], " = Load_", item[0], "(this);\n"		    end		end	    }	end		def writeCopyFunctionPointers(frontEnd, file, array)	    array.each { |item|		if item[1].functionList.size != 0            file.print "#line 226 \"utility/glextgen/script/glbackend.rb\"\n"		    file.print "#ifdef ", item[0], "\n"		    item[1].functionList.each { |function|			file.print "		funPtr->fun_", function, " = ", function, ";\n"		    }		    file.print "#endif //", item[0], "\n\n"		end	    }	end	def generateCPPFile(frontEnd, glArray, wglArray, glXArray)	    print "Generating 'glextensionreg.cpp'\n"	    File.open("glextensionreg.cpp", "w")	{ |f|		f.print "#line 241 \"utility/glextgen/script/glbackend.rb\"\n"		f.print "#include \"glextensionreg.h\"\n";        if $namespace != nil		    f.print "using namespace ", $namespace, ";\n\n"		end        copyFile(f, "tocopy/cpp_begin.txt")		### create global function pointers		writeFunctionPointers(frontEnd, f, glArray)        f.print "#line 251 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOn		writeFunctionPointers(frontEnd, f, wglArray)        f.print "#line 254 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOff				### create load functions		writeLoadFunctions(frontEnd, f, glArray)        f.print "#line 259 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOn		writeLoadFunctions(frontEnd, f, wglArray)        f.print "#line 262 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOff + "\n"				f.print "GLExtensionReg::GLExtensionReg()\n"		f.print "{\n"		f.print "	memset(&mExtensions, 0, sizeof(GLExtGenExtensions));\n"		f.print	winGuardOn		f.print "	mHDC = NULL;\n"		f.print	winGuardOff		f.print "}\n\n"				f.print "GLExtensionReg::~GLExtensionReg()\n"		f.print "{\n"		f.print "}\n\n"				f.print "void GLExtensionReg::Init(GLExtGenFunctionPointers *funPtr, GLExtGenExtensions *ext)\n"		f.print "{\n"		f.print "	char *s = (char*) glGetString(GL_VERSION);\n\n"				f.print "	if (!s)\n"		f.print "		return;\n"		f.print "	s = strstr(s, \"1.\");\n"		f.print "	if (s != NULL)\n"		f.print "	{\n"		f.print "		if (s[2] >= '4')\n"		f.print "			mExtensions.mGL_VERSION_1_4 = true;\n"		f.print "		if (s[2] >= '3')\n"		f.print "			mExtensions.mGL_VERSION_1_3 = true;\n"		f.print "		if (s[2] >= '2')\n"		f.print "			mExtensions.mGL_VERSION_1_2 = true;\n"    		f.print "	}\n\n"				### call load functions		writeCallLoadFunctions(frontEnd, f, glArray)        f.print "#line 296 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOn		# here we do some special case processing for the wgl extension stuff		f.print "    wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC) GetProcedure(\"wglGetExtensionsStringARB\");\n"		f.print "    wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC) GetProcedure(\"wglGetExtensionsStringEXT\");\n"		f.print "    mExtensions.mWGL_ARB_extensions_string = wglGetExtensionsStringARB != NULL;\n"		f.print "    mExtensions.mWGL_EXT_extensions_string = wglGetExtensionsStringEXT != NULL;\n\n"		writeCallLoadFunctions(frontEnd, f, wglArray)        f.print "#line 304 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOff + "\n"				f.print "	if (ext)\n"		f.print "		memcpy(ext, &mExtensions, sizeof(GLExtGenExtensions));\n\n"				f.print "	if (funPtr)\n"		f.print "	{\n"		writeCopyFunctionPointers(frontEnd, f, glArray)        f.print "#line 313 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOn		writeCopyFunctionPointers(frontEnd, f, wglArray)        f.print "#line 316 \"utility/glextgen/script/glbackend.rb\"\n"		f.print winGuardOff + "\n"		f.print "	}\n"		f.print "}\n\n"	    }	end    endend

⌨️ 快捷键说明

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