freeglutDemo

编译并使用Freeglut工具库

作者
WildPointer
更新
2025-12-04
类型
自有项目
仓库
0 stars / 0 forks(抓取快照)

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
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;}
WildPointer

专注系统编程、工程实践与底层技术,记录 C++、Qt、OpenCV 与 VTK 的学习和实践。