freeglutDemo
编译并使用Freeglut工具库
freeglutDemo
编译并使用Freeglut工具库
语言组成
- C
- 91.2%
- C++
- 8.8%
文件结构
查看完整文件清单(139 个文件)
README.md freeglutDemo.sln freeglutDemo/freeglut3.8.0_MSVC_Win/.vs/freeglut/FileContentIndex/45be1c61-817f-4c5d-9a04-8f4e0db96375.vsidx freeglutDemo/freeglut3.8.0_MSVC_Win/.vs/freeglut/v17/.suo freeglutDemo/freeglut3.8.0_MSVC_Win/.vs/freeglut/v17/Browse.VC.db freeglutDemo/freeglut3.8.0_MSVC_Win/.vs/freeglut/v17/DocumentLayout.backup.json freeglutDemo/freeglut3.8.0_MSVC_Win/.vs/freeglut/v17/DocumentLayout.json freeglutDemo/freeglut3.8.0_MSVC_Win/.vs/freeglut/v17/Solution.VC.db freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/3dview_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/3dview_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/3dviewd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/3dviewd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/CallbackMaker_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/CallbackMaker_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/CallbackMakerd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/CallbackMakerd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Fractals_random_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Fractals_random_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Fractals_randomd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Fractals_randomd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Fractals_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Fractals_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Fractalsd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Fractalsd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Lorenz_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Lorenz_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Lorenzd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Lorenzd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/One_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/One_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Oned.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/Oned.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/accum_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/accum_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/accumd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/accumd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/freeglutd.dll freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/freeglutd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/indexed_color_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/indexed_color_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/indexed_colord.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/indexed_colord.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/joystick_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/joystick_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/joystickd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/joystickd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/keyboard_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/keyboard_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/keyboardd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/keyboardd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/multi-touch_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/multi-touch_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/multi-touchd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/multi-touchd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/resizer_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/resizer_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/resizerd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/resizerd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/shapes_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/shapes_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/shapesd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/shapesd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/smooth_opengl3_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/smooth_opengl3_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/smooth_opengl3d.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/smooth_opengl3d.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/spaceball_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/spaceball_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/spaceballd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/spaceballd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/subwin_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/subwin_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/subwind.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/subwind.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/timer_callback_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/timer_callback_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/timer_callbackd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/timer_callbackd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/timer_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/timer_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/timerd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/timerd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/vsync_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/vsync_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/vsyncd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/vsyncd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/windows_staticd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/windows_staticd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/windowsd.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Debug/windowsd.pdb freeglutDemo/freeglut3.8.0_MSVC_Win/Release/3dview.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/3dview_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/CallbackMaker.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/CallbackMaker_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/Fractals.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/Fractals_random.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/Fractals_random_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/Fractals_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/Lorenz.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/Lorenz_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/One.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/One_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/accum.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/accum_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/freeglut.dll freeglutDemo/freeglut3.8.0_MSVC_Win/Release/indexed_color.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/indexed_color_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/joystick.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/joystick_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/keyboard.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/keyboard_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/multi-touch.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/multi-touch_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/resizer.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/resizer_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/shapes.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/shapes_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/smooth_opengl3.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/smooth_opengl3_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/spaceball.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/spaceball_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/subwin.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/subwin_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/timer.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/timer_callback.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/timer_callback_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/timer_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/vsync.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/vsync_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/windows.exe freeglutDemo/freeglut3.8.0_MSVC_Win/Release/windows_static.exe freeglutDemo/freeglut3.8.0_MSVC_Win/include/GL/freeglut.h freeglutDemo/freeglut3.8.0_MSVC_Win/include/GL/freeglut_ext.h freeglutDemo/freeglut3.8.0_MSVC_Win/include/GL/freeglut_std.h freeglutDemo/freeglut3.8.0_MSVC_Win/include/GL/freeglut_ucall.h freeglutDemo/freeglut3.8.0_MSVC_Win/include/GL/glut.h freeglutDemo/freeglutDemo.vcxproj freeglutDemo/freeglutDemo.vcxproj.filters freeglutDemo/src/test_freeglut.cpp
关键源码
freeglutDemo/src/test_freeglut.cpp
#include <windows.h>#include <GL/gl.h>#include <GL/glu.h>#include <cstdio>#include <string>static HMODULE hFreeglut;typedef void (*PF_glutInit)(int*, char**);typedef void (*PF_glutInitWindowSize)(int, int);typedef void (*PF_glutInitDisplayMode)(unsigned int);typedef int (*PF_glutCreateWindow)(const char*);typedef void (*PF_glutDisplayFunc)(void (*)(void));typedef void (*PF_glutMainLoop)();typedef void (*PF_glutTimerFunc)(unsigned int, void (*)(int), int);typedef void (*PF_glutSwapBuffers)();typedef void (*PF_glutPostRedisplay)();static PF_glutInit p_glutInit;static PF_glutInitWindowSize p_glutInitWindowSize;static PF_glutInitDisplayMode p_glutInitDisplayMode;static PF_glutCreateWindow p_glutCreateWindow;static PF_glutDisplayFunc p_glutDisplayFunc;static PF_glutMainLoop p_glutMainLoop;static PF_glutTimerFunc p_glutTimerFunc;static PF_glutSwapBuffers p_glutSwapBuffers;static PF_glutPostRedisplay p_glutPostRedisplay;static FARPROC loadSym(const char* name) { FARPROC p = GetProcAddress(hFreeglut, name); if (!p) { char buf[64]; for (int i = 0; i <= 64; ++i) buf[i] = 0; std::snprintf(buf, sizeof(buf), "%s@%d", name, 4); p = GetProcAddress(hFreeglut, buf); } return p;}static bool loadFreeglut(const char* dllPath) { hFreeglut = LoadLibraryA(dllPath); if (!hFreeglut) return false; p_glutInit = (PF_glutInit)loadSym("glutInit"); p_glutInitWindowSize = (PF_glutInitWindowSize)loadSym("glutInitWindowSize"); p_glutInitDisplayMode = (PF_glutInitDisplayMode)loadSym("glutInitDisplayMode"); p_glutCreateWindow = (PF_glutCreateWindow)loadSym("glutCreateWindow"); p_glutDisplayFunc = (PF_glutDisplayFunc)loadSym("glutDisplayFunc"); p_glutMainLoop = (PF_glutMainLoop)loadSym("glutMainLoop"); p_glutTimerFunc = (PF_glutTimerFunc)loadSym("glutTimerFunc"); p_glutSwapBuffers = (PF_glutSwapBuffers)loadSym("glutSwapBuffers"); p_glutPostRedisplay = (PF_glutPostRedisplay)loadSym("glutPostRedisplay"); return p_glutInit && p_glutInitWindowSize && p_glutInitDisplayMode && p_glutCreateWindow && p_glutDisplayFunc && p_glutMainLoop && p_glutTimerFunc && p_glutSwapBuffers && p_glutPostRedisplay;}static void display() { glViewport(0, 0, 800, 600); glClearColor(0.1f, 0.1f, 0.15f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glColor3f(1.f, 0.f, 0.f); glVertex2f(-0.6f, -0.4f); glColor3f(0.f, 1.f, 0.f); glVertex2f(0.6f, -0.4f); glColor3f(0.f, 0.f, 1.f); glVertex2f(0.0f, 0.6f); glEnd(); p_glutSwapBuffers();}static void quitTimer(int) { std::exit(0);}static void tick(int) {}static std::string exeDir() { char path[MAX_PATH]; DWORD len = GetModuleFileNameA(GetModuleHandleA(nullptr), path, MAX_PATH); if (!len) return std::string(); std::string s(path, len); size_t pos = s.find_last_of("\\/"); if (pos == std::string::npos) return std::string(); return s.substr(0, pos);}int main(int argc, char** argv) { std::string dir = exeDir(); auto exists = [](const std::string& p) -> bool { DWORD attr = GetFileAttributesA(p.c_str()); return attr != INVALID_FILE_ATTRIBUTES && !(attr & FILE_ATTRIBUTE_DIRECTORY); };#ifdef _DEBUG const char* conf = "Debug"; const char* name = "freeglutd.dll";#else const char* conf = "Release"; const char* name = "freeglut.dll";#endif std::string dll; std::string candidates[] = { dir + std::string("\\..\\..\\freeglutDemo\\freeglut3.8.0_MSVC_Win\\") + conf + "\\" + name, dir + std::string("\\..\\freeglutDemo\\freeglut3.8.0_MSVC_Win\\") + conf + "\\" + name, dir + std::string("\\..\\freeglut3.8.0_MSVC_Win\\") + conf + "\\" + name, dir + std::string("\\..\\..\\freeglut3.8.0_MSVC_Win\\") + conf + "\\" + name }; for (const auto& c : candidates) { if (exists(c)) { dll = c; break; } } if (dll.empty() || !loadFreeglut(dll.c_str())) { std::fprintf(stderr, "Failed to load Freeglut: %s\n", dll.c_str()); return 1; } p_glutInit(&argc, argv); const unsigned int GLUT_RGB = 0u; const unsigned int GLUT_DOUBLE = 2u; p_glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); p_glutInitWindowSize(800, 600); p_glutCreateWindow("Freeglut Test"); p_glutDisplayFunc(display); p_glutTimerFunc(30000, quitTimer, 0); p_glutMainLoop(); return 0;}