ArbBackend.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00027 #include <iostream>
00028 #include "Arb.hpp"
00029 #include "GlTextures.hpp"
00030 #include "GlBackend.hpp"
00031 #ifndef WIN32
00032 #include "PBufferStreams.hpp"
00033 #endif
00034 #ifdef WIN32
00035 #include <windows.h>
00036 #endif
00037
00038 namespace shgl {
00039
00040 struct ArbBackend : public GlBackend {
00041 ArbBackend()
00042 : GlBackend(new ArbCodeStrategy(),
00043 new GlTextures(),
00044 #ifdef WIN32
00045 0)
00046 #else
00047 new PBufferStreams())
00048 #endif
00049 {
00050 }
00051
00052 std::string name() const { return "arb"; }
00053 };
00054
00055 #ifdef WIN32
00056 static ArbBackend* backend = 0;
00057
00058 extern "C"
00059 BOOL APIENTRY DllMain(HANDLE hModule,
00060 DWORD ul_reason_for_call,
00061 LPVOID lpReserved)
00062 {
00063 std::cerr << "Arb Backend DllMain called!" << std::endl;
00064 std::cerr << "Have backend: " << backend << std::endl;
00065 std::cerr << "lpReserved = " << lpReserved << std::endl;
00066 std::cerr << "hModule = " << lpReserved << std::endl;
00067 switch (ul_reason_for_call) {
00068 case DLL_PROCESS_ATTACH:
00069 std::cerr << "Process attach!" << std::endl;
00070 if (backend) return TRUE;
00071 backend = new ArbBackend();
00072 break;
00073 case DLL_THREAD_ATTACH:
00074 case DLL_THREAD_DETACH:
00075 std::cerr << "Thread!" << std::endl;
00076 break;
00077 case DLL_PROCESS_DETACH:
00078 std::cerr << "Process detach!" << std::endl;
00079 delete backend;
00080 std::cerr << "Deleted backend!" << std::endl;
00081 break;
00082 default:
00083 std::cerr << "Some Other Thing!" << std::endl;
00084 }
00085 return TRUE;
00086 }
00087
00088 #else
00089 static ArbBackend* backend = new ArbBackend();
00090 #endif
00091 }
Generated on Mon Oct 18 14:17:38 2004 for Sh by
1.3.7