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 "Glsl.hpp"
00031 #include "GlTextures.hpp"
00032 #include "GlBackend.hpp"
00033 #include "PBufferStreams.hpp"
00034
00035 namespace shgl {
00036
00037 struct GlslBackend : public GlBackend {
00038 GlslBackend()
00039 : GlBackend(new GlslCodeStrategy(),
00040 new GlTextures(),
00041 new PBufferStreams())
00042 {
00043 }
00044
00045 std::string name() const { return "glsl"; }
00046 };
00047
00048 #ifdef WIN32
00049 static GlslBackend* backend = 0;
00050
00051 extern "C"
00052 BOOL APIENTRY DllMain(HANDLE hModule,
00053 DWORD ul_reason_for_call,
00054 LPVOID lpReserved)
00055 {
00056 std::cerr << "Glsl Backend DllMain called!" << std::endl;
00057 std::cerr << "Have backend: " << backend << std::endl;
00058 std::cerr << "lpReserved = " << lpReserved << std::endl;
00059 std::cerr << "hModule = " << hModule << std::endl;
00060 switch (ul_reason_for_call) {
00061 case DLL_PROCESS_ATTACH:
00062 std::cerr << "Process attach!" << std::endl;
00063 if (backend) return TRUE;
00064 backend = new GlslBackend();
00065 break;
00066 case DLL_THREAD_ATTACH:
00067 case DLL_THREAD_DETACH:
00068 std::cerr << "Thread!" << std::endl;
00069 break;
00070 case DLL_PROCESS_DETACH:
00071 std::cerr << "Process detach!" << std::endl;
00072 delete backend;
00073 std::cerr << "Deleted backend!" << std::endl;
00074 break;
00075 default:
00076 std::cerr << "Some Other Thing!" << std::endl;
00077 }
00078 return TRUE;
00079 }
00080
00081 #else
00082 static GlslBackend* backend = new GlslBackend();
00083 #endif
00084 }