added windows .ico example

This commit is contained in:
Alexander Popov 2015-09-13 15:29:53 +03:00
parent 26a453a704
commit 9257b43737
14 changed files with 5372 additions and 2 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.o
*.exe

17
Makefile.win32 Normal file
View File

@ -0,0 +1,17 @@
CC=tcc
CFLAGS= -I./win32/include -L./win32/lib
all: fps_counter windows_icon
fps_counter:
$(CC) $(CFLAGS) fps_counter.c -lglfw3 -lopengl32 -o fps_counter.exe
windows_icon: icon.o
$(CC) $(CFLAGS) windows_icon.c icon.o -lglfw3 -lopengl32 -o windows_icon.exe
icon.o:
windres -O coff win32/icon/resource.rc -o icon.o
clean:
del *.o
del *.exe

View File

@ -4,7 +4,11 @@
Compile: gcc fps_counter.c -lglfw -lGL Compile: gcc fps_counter.c -lglfw -lGL
*/ */
#include <stdio.h> #include <stdio.h>
#ifndef _WIN32
#include <windows.h>
#endif
#include "GLFW/glfw3.h" #include "GLFW/glfw3.h"
int main() int main()
@ -26,7 +30,7 @@ int main()
int frames = 0; int frames = 0;
double t, t0, fps; double t, t0, fps;
char title_string[200]; char title_string[10];
t0 = glfwGetTime(); t0 = glfwGetTime();
@ -49,7 +53,7 @@ int main()
if((t - t0) > 1.0 || frames == 0) if((t - t0) > 1.0 || frames == 0)
{ {
fps = (double)frames / (t - t0); fps = (double)frames / (t - t0);
sprintf(title_string, "FPS: %.1f FPS", fps); sprintf(title_string, "FPS: %.1f", fps);
glfwSetWindowTitle(window, title_string); glfwSetWindowTitle(window, title_string);
t0 = t; t0 = t;
frames = 0; frames = 0;

BIN
glfw3.dll Normal file

Binary file not shown.

1
win32/icon/resource.rc Normal file
View File

@ -0,0 +1 @@
AppIconNm ICON "windows.ico"

BIN
win32/icon/windows.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

1526
win32/include/GL/GL.H Normal file

File diff suppressed because it is too large Load Diff

3340
win32/include/GLFW/glfw3.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,356 @@
/*************************************************************************
* GLFW 3.1 - www.glfw.org
* A library for OpenGL, window and input
*------------------------------------------------------------------------
* Copyright (c) 2002-2006 Marcus Geelnard
* Copyright (c) 2006-2010 Camilla Berglund <elmindreda@elmindreda.org>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would
* be appreciated but is not required.
*
* 2. Altered source versions must be plainly marked as such, and must not
* be misrepresented as being the original software.
*
* 3. This notice may not be removed or altered from any source
* distribution.
*
*************************************************************************/
#ifndef _glfw3_native_h_
#define _glfw3_native_h_
#ifdef __cplusplus
extern "C" {
#endif
/*************************************************************************
* Doxygen documentation
*************************************************************************/
/*! @defgroup native Native access
*
* **By using the native access functions you assert that you know what you're
* doing and how to fix problems caused by using them. If you don't, you
* shouldn't be using them.**
*
* Before the inclusion of @ref glfw3native.h, you must define exactly one
* window system API macro and exactly one context creation API macro. Failure
* to do this will cause a compile-time error.
*
* The available window API macros are:
* * `GLFW_EXPOSE_NATIVE_WIN32`
* * `GLFW_EXPOSE_NATIVE_COCOA`
* * `GLFW_EXPOSE_NATIVE_X11`
*
* The available context API macros are:
* * `GLFW_EXPOSE_NATIVE_WGL`
* * `GLFW_EXPOSE_NATIVE_NSGL`
* * `GLFW_EXPOSE_NATIVE_GLX`
* * `GLFW_EXPOSE_NATIVE_EGL`
*
* These macros select which of the native access functions that are declared
* and which platform-specific headers to include. It is then up your (by
* definition platform-specific) code to handle which of these should be
* defined.
*/
/*************************************************************************
* System headers and types
*************************************************************************/
#if defined(GLFW_EXPOSE_NATIVE_WIN32)
// This is a workaround for the fact that glfw3.h needs to export APIENTRY (for
// example to allow applications to correctly declare a GL_ARB_debug_output
// callback) but windows.h assumes no one will define APIENTRY before it does
#undef APIENTRY
#include <windows.h>
#elif defined(GLFW_EXPOSE_NATIVE_COCOA)
#include <ApplicationServices/ApplicationServices.h>
#if defined(__OBJC__)
#import <Cocoa/Cocoa.h>
#else
typedef void* id;
#endif
#elif defined(GLFW_EXPOSE_NATIVE_X11)
#include <X11/Xlib.h>
#include <X11/extensions/Xrandr.h>
#else
#error "No window API selected"
#endif
#if defined(GLFW_EXPOSE_NATIVE_WGL)
/* WGL is declared by windows.h */
#elif defined(GLFW_EXPOSE_NATIVE_NSGL)
/* NSGL is declared by Cocoa.h */
#elif defined(GLFW_EXPOSE_NATIVE_GLX)
#include <GL/glx.h>
#elif defined(GLFW_EXPOSE_NATIVE_EGL)
#include <EGL/egl.h>
#else
#error "No context API selected"
#endif
/*************************************************************************
* Functions
*************************************************************************/
#if defined(GLFW_EXPOSE_NATIVE_WIN32)
/*! @brief Returns the adapter device name of the specified monitor.
*
* @return The UTF-8 encoded adapter device name (for example `\\.\DISPLAY1`)
* of the specified monitor, or `NULL` if an [error](@ref error_handling)
* occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.1.
*
* @ingroup native
*/
GLFWAPI const char* glfwGetWin32Adapter(GLFWmonitor* monitor);
/*! @brief Returns the display device name of the specified monitor.
*
* @return The UTF-8 encoded display device name (for example
* `\\.\DISPLAY1\Monitor0`) of the specified monitor, or `NULL` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.1.
*
* @ingroup native
*/
GLFWAPI const char* glfwGetWin32Monitor(GLFWmonitor* monitor);
/*! @brief Returns the `HWND` of the specified window.
*
* @return The `HWND` of the specified window, or `NULL` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.0.
*
* @ingroup native
*/
GLFWAPI HWND glfwGetWin32Window(GLFWwindow* window);
#endif
#if defined(GLFW_EXPOSE_NATIVE_WGL)
/*! @brief Returns the `HGLRC` of the specified window.
*
* @return The `HGLRC` of the specified window, or `NULL` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.0.
*
* @ingroup native
*/
GLFWAPI HGLRC glfwGetWGLContext(GLFWwindow* window);
#endif
#if defined(GLFW_EXPOSE_NATIVE_COCOA)
/*! @brief Returns the `CGDirectDisplayID` of the specified monitor.
*
* @return The `CGDirectDisplayID` of the specified monitor, or
* `kCGNullDirectDisplay` if an [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.1.
*
* @ingroup native
*/
GLFWAPI CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor);
/*! @brief Returns the `NSWindow` of the specified window.
*
* @return The `NSWindow` of the specified window, or `nil` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.0.
*
* @ingroup native
*/
GLFWAPI id glfwGetCocoaWindow(GLFWwindow* window);
#endif
#if defined(GLFW_EXPOSE_NATIVE_NSGL)
/*! @brief Returns the `NSOpenGLContext` of the specified window.
*
* @return The `NSOpenGLContext` of the specified window, or `nil` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.0.
*
* @ingroup native
*/
GLFWAPI id glfwGetNSGLContext(GLFWwindow* window);
#endif
#if defined(GLFW_EXPOSE_NATIVE_X11)
/*! @brief Returns the `Display` used by GLFW.
*
* @return The `Display` used by GLFW, or `NULL` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.0.
*
* @ingroup native
*/
GLFWAPI Display* glfwGetX11Display(void);
/*! @brief Returns the `RRCrtc` of the specified monitor.
*
* @return The `RRCrtc` of the specified monitor, or `None` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.1.
*
* @ingroup native
*/
GLFWAPI RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor);
/*! @brief Returns the `RROutput` of the specified monitor.
*
* @return The `RROutput` of the specified monitor, or `None` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.1.
*
* @ingroup native
*/
GLFWAPI RROutput glfwGetX11Monitor(GLFWmonitor* monitor);
/*! @brief Returns the `Window` of the specified window.
*
* @return The `Window` of the specified window, or `None` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.0.
*
* @ingroup native
*/
GLFWAPI Window glfwGetX11Window(GLFWwindow* window);
#endif
#if defined(GLFW_EXPOSE_NATIVE_GLX)
/*! @brief Returns the `GLXContext` of the specified window.
*
* @return The `GLXContext` of the specified window, or `NULL` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.0.
*
* @ingroup native
*/
GLFWAPI GLXContext glfwGetGLXContext(GLFWwindow* window);
#endif
#if defined(GLFW_EXPOSE_NATIVE_EGL)
/*! @brief Returns the `EGLDisplay` used by GLFW.
*
* @return The `EGLDisplay` used by GLFW, or `EGL_NO_DISPLAY` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.0.
*
* @ingroup native
*/
GLFWAPI EGLDisplay glfwGetEGLDisplay(void);
/*! @brief Returns the `EGLContext` of the specified window.
*
* @return The `EGLContext` of the specified window, or `EGL_NO_CONTEXT` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.0.
*
* @ingroup native
*/
GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window);
/*! @brief Returns the `EGLSurface` of the specified window.
*
* @return The `EGLSurface` of the specified window, or `EGL_NO_SURFACE` if an
* [error](@ref error_handling) occurred.
*
* @par Thread Safety
* This function may be called from any thread. Access is not synchronized.
*
* @par History
* Added in GLFW 3.0.
*
* @ingroup native
*/
GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window);
#endif
#ifdef __cplusplus
}
#endif
#endif /* _glfw3_native_h_ */

BIN
win32/lib/OPENGL32.LIB Normal file

Binary file not shown.

86
win32/lib/glfw3.def Normal file
View File

@ -0,0 +1,86 @@
LIBRARY glfw3.dll
EXPORTS
glfwCreateCursor
glfwCreateStandardCursor
glfwCreateWindow
glfwDefaultWindowHints
glfwDestroyCursor
glfwDestroyWindow
glfwExtensionSupported
glfwGetClipboardString
glfwGetCurrentContext
glfwGetCursorPos
glfwGetFramebufferSize
glfwGetGammaRamp
glfwGetInputMode
glfwGetJoystickAxes
glfwGetJoystickButtons
glfwGetJoystickName
glfwGetKey
glfwGetMonitorName
glfwGetMonitorPhysicalSize
glfwGetMonitorPos
glfwGetMonitors
glfwGetMouseButton
glfwGetPrimaryMonitor
glfwGetProcAddress
glfwGetTime
glfwGetVersion
glfwGetVersionString
glfwGetVideoMode
glfwGetVideoModes
glfwGetWGLContext
glfwGetWin32Adapter
glfwGetWin32Monitor
glfwGetWin32Window
glfwGetWindowAttrib
glfwGetWindowFrameSize
glfwGetWindowMonitor
glfwGetWindowPos
glfwGetWindowSize
glfwGetWindowUserPointer
glfwHideWindow
glfwIconifyWindow
glfwInit
glfwJoystickPresent
glfwMakeContextCurrent
glfwPollEvents
glfwPostEmptyEvent
glfwRestoreWindow
glfwSetCharCallback
glfwSetCharModsCallback
glfwSetClipboardString
glfwSetCursor
glfwSetCursorEnterCallback
glfwSetCursorPos
glfwSetCursorPosCallback
glfwSetDropCallback
glfwSetErrorCallback
glfwSetFramebufferSizeCallback
glfwSetGamma
glfwSetGammaRamp
glfwSetInputMode
glfwSetKeyCallback
glfwSetMonitorCallback
glfwSetMouseButtonCallback
glfwSetScrollCallback
glfwSetTime
glfwSetWindowCloseCallback
glfwSetWindowFocusCallback
glfwSetWindowIconifyCallback
glfwSetWindowPos
glfwSetWindowPosCallback
glfwSetWindowRefreshCallback
glfwSetWindowShouldClose
glfwSetWindowSize
glfwSetWindowSizeCallback
glfwSetWindowTitle
glfwSetWindowUserPointer
glfwShowWindow
glfwSwapBuffers
glfwSwapInterval
glfwTerminate
glfwWaitEvents
glfwWindowHint
glfwWindowShouldClose

BIN
win32/lib/glfw3dll.a Normal file

Binary file not shown.

BIN
win32/lib/libglfw3.a Normal file

Binary file not shown.

38
windows_icon.c Normal file
View File

@ -0,0 +1,38 @@
/*
GLFW3 window icon
Source: https://github.com/IIIypuk/glfw-examples
*/
#include <windows.h>
#include <GLFW/glfw3.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,
LPSTR lpszCmdLine, int nShowCmd)
{
GLFWwindow *window;
if (!glfwInit())
return -1;
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
window = glfwCreateWindow(192, 64, "Windows icon", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
while (!glfwWindowShouldClose(window))
{
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}