00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifdef WIN32
00025 #include <windows.h>
00026 #endif
00027
00028 #include <iostream>
00029
00030 #include "Arb.hpp"
00031 #include "GlTextures.hpp"
00032 #include "GlBackend.hpp"
00033
00034 #include "PBufferStreams.hpp"
00035
00036 namespace shgl {
00037
00038 struct ArbBackend : public GlBackend {
00039 ArbBackend()
00040 : GlBackend(new ArbCodeStrategy(),
00041 new GlTextures(),
00042 #ifdef __APPLE__
00043
00044 0)
00045 #else
00046 new PBufferStreams())
00047 #endif
00048 {
00049 }
00050
00051 std::string name() const { return "arb"; }
00052 };
00053
00054 #ifdef WIN32
00055 static ArbBackend* backend = 0;
00056
00057 extern "C"
00058 BOOL APIENTRY DllMain(HANDLE hModule,
00059 DWORD ul_reason_for_call,
00060 LPVOID lpReserved)
00061 {
00062 switch (ul_reason_for_call) {
00063 case DLL_PROCESS_ATTACH:
00064 if (backend) return TRUE;
00065 backend = new ArbBackend();
00066 break;
00067 case DLL_THREAD_ATTACH:
00068 case DLL_THREAD_DETACH:
00069 break;
00070 case DLL_PROCESS_DETACH:
00071 delete backend;
00072 break;
00073 default:
00074 break;
00075 }
00076 return TRUE;
00077 }
00078
00079 #else
00080 static ArbBackend* backend = new ArbBackend();
00081 #endif
00082 }