diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8965e0f --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +# ---> C++ +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +#vs2015 +Debug +Release +x64 +.git +ipch diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..453259f --- /dev/null +++ b/main.cpp @@ -0,0 +1,104 @@ +#include +#include +#include +#pragma comment(lib,"opengl32.lib") + +/** +* @hwnd 发起消息的窗口 +* @msg 消息类型 +*/ +LRESULT CALLBACK GLWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { + switch (msg) { + case WM_CLOSE: + PostQuitMessage(0); + return 0; + } + + return DefWindowProc(hwnd, msg, wParam, lParam);//其他消息调用window默认处理函数 +} + +/** +* @hinstance 本应用程序启动实例 +* @hPrevInstance 上一次应用程式的实例 +* @IpCmdLine 命令行的参数 +* @ShowCmd 怎么显示窗口 +*/ +INT WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) +{ + /*注册窗口*/ + WNDCLASSEX wndclass; + wndclass.cbClsExtra = 0; //窗口类型的额外空间,这里不需要 + wndclass.cbSize = sizeof(WNDCLASSEX); //窗口实际占用的内存 + wndclass.cbWndExtra = 0; //窗口的额外空间,这里不需要 + wndclass.hbrBackground = NULL; //窗口背景 + wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //定义鼠标类型 + wndclass.hIcon = NULL; //应用程序exe文件显示图标 + wndclass.hIconSm = NULL; //应用程序运行时左上角图标 + wndclass.hInstance = hinstance; //本应用程序实例 + wndclass.lpfnWndProc = GLWindowProc; //如果用户操作了窗口,本函数会被调用 + wndclass.lpszClassName = L"GLWindow";//窗口名称 + wndclass.lpszMenuName = NULL;//菜单名称 + wndclass.style = CS_VREDRAW | CS_HREDRAW;//窗口更新时的重绘方式,这里使用垂直重绘和水平重绘 + ATOM atom = RegisterClassEx(&wndclass); + if (!atom) { + MessageBox(NULL, L"Register failed", L"Error", MB_OK); + return 0; + } + + /*创建窗口*/ + //调整窗口大小 + RECT rect; + rect.left = 0; + rect.right = 800; + rect.top = 0; + rect.bottom = 600; + AdjustWindowRect(&rect, WS_EX_OVERLAPPEDWINDOW, NULL); + int windowWidth = rect.right - rect.left; + int windowHeight = rect.bottom - rect.top; + + //窗口名称一定要和刚才注册窗口的保持一致 + HWND hwnd = CreateWindowEx(NULL, L"GLWindow", L"OpenGL Window", WS_OVERLAPPEDWINDOW, 100, 100, windowWidth, windowHeight, NULL, NULL, hinstance, NULL); + + //设置渲染环境 + HDC dc = GetDC(hwnd);//获取设备上下文 + PIXELFORMATDESCRIPTOR pfd; + memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR)); + pfd.nVersion = 1; + pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); + pfd.cColorBits = 32; //颜色缓冲区每个像素为32比特4通道RGBA + pfd.cDepthBits = 24; //深度缓冲区每个像素大小,24比特表示一个浮点数 + pfd.cStencilBits = 8; //蒙板缓冲区每像素为8比特 + pfd.iPixelType = PFD_TYPE_RGBA; //设置像素类型为RGBA + pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; //表示像素最后输出到窗口 + //设置像素格式 + int pixelFormat = ChoosePixelFormat(dc, &pfd); + SetPixelFormat(dc, pixelFormat, &pfd); + + //创建OpenGL渲染环境 + HGLRC rc = wglCreateContext(dc); + wglMakeCurrent(dc, rc);//设置OpenGL渲染环境生效 + + glClearColor(1.0f, 1.0f, 0.0f, 1.0f); + + /*显示窗口*/ + ShowWindow(hwnd, SW_SHOW); + UpdateWindow(hwnd); + + /*监听并处理用户请求*/ + MSG msg; + while (true) { + if (PeekMessage(&msg, NULL, NULL, NULL, PM_REMOVE)) { + if (msg.message == WM_QUIT) { + break; + } + TranslateMessage(&msg); + DispatchMessage(&msg); + } + + glClear(GL_COLOR_BUFFER_BIT); + + SwapBuffers(dc); + } + + return 0; +} \ No newline at end of file diff --git a/shader2.VC.VC.opendb b/shader2.VC.VC.opendb new file mode 100644 index 0000000..6f61c18 Binary files /dev/null and b/shader2.VC.VC.opendb differ diff --git a/shader2.VC.db b/shader2.VC.db new file mode 100644 index 0000000..d8c0df7 Binary files /dev/null and b/shader2.VC.db differ diff --git a/shader2.sln b/shader2.sln new file mode 100644 index 0000000..09c27b8 --- /dev/null +++ b/shader2.sln @@ -0,0 +1,28 @@ +锘 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "shader2", "shader2.vcxproj", "{7BF953FA-C4AE-4FD4-9DD5-91F683C18173}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7BF953FA-C4AE-4FD4-9DD5-91F683C18173}.Debug|x64.ActiveCfg = Debug|x64 + {7BF953FA-C4AE-4FD4-9DD5-91F683C18173}.Debug|x64.Build.0 = Debug|x64 + {7BF953FA-C4AE-4FD4-9DD5-91F683C18173}.Debug|x86.ActiveCfg = Debug|Win32 + {7BF953FA-C4AE-4FD4-9DD5-91F683C18173}.Debug|x86.Build.0 = Debug|Win32 + {7BF953FA-C4AE-4FD4-9DD5-91F683C18173}.Release|x64.ActiveCfg = Release|x64 + {7BF953FA-C4AE-4FD4-9DD5-91F683C18173}.Release|x64.Build.0 = Release|x64 + {7BF953FA-C4AE-4FD4-9DD5-91F683C18173}.Release|x86.ActiveCfg = Release|Win32 + {7BF953FA-C4AE-4FD4-9DD5-91F683C18173}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/shader2.vcxproj b/shader2.vcxproj new file mode 100644 index 0000000..166bb88 --- /dev/null +++ b/shader2.vcxproj @@ -0,0 +1,153 @@ +锘 + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {7BF953FA-C4AE-4FD4-9DD5-91F683C18173} + Win32Proj + shader2 + 8.1 + + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + Application + true + v140 + Unicode + + + Application + false + v140 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + + + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + + + editbin /subsystem:console $(OutDir)$(ProjectName).exe + + + + + + + Level3 + Disabled + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + + + + + Level3 + + + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + Level3 + + + MaxSpeed + true + true + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + + + Windows + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/shader2.vcxproj.filters b/shader2.vcxproj.filters new file mode 100644 index 0000000..203a71c --- /dev/null +++ b/shader2.vcxproj.filters @@ -0,0 +1,22 @@ +锘 + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 婧愭枃浠 + + + \ No newline at end of file