Giter Club home page Giter Club logo

cyglfw3's Introduction

CyGLFW3

Python bindings for GLFW 3+ using Cython.

Provides an API which matches the C API.

Differences

  • Enumerations have dropped their "GLFW_" prefix.
  • Functions have dropped their "glfw" prefix.
  • {Get|Set}UserPointer is not accessible as it doesn't make sense for Python.
  • The {Get|Set}Time functions are available but Python's time module should be used in preference.

C Code

#include <GLFW/glfw3.h>
int main(void)
{
    GLFWwindow* window;

    /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);

    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    glfwMakeContextCurrent(window);
    while (!glfwWindowShowClose(window))
    {
        /* Render here */

        /* Display the render buffer */
        glfwSwapBuffers(window);

        /* Pump the message queue */
        glfwPollEvents();
    }

    /* Shutdown */
    glfwTerminate();
    return 0;
}

Python Code

# needed if you're running the OS-X system python
try:
    from AppKit import NSApp, NSApplication
except:
    pass

import cyglfw3 as glfw
if not glfw.Init():
    exit()

window = glfw.CreateWindow(640, 480, 'Hello World')
if not window:
    glfw.Terminate()
    exit()

glfw.MakeContextCurrent(window)
while not glfw.WindowShouldClose(window):
    # Render here

    # Swap front and back buffers
    glfw.SwapBuffers(window)

    # Poll for and process events
    glfw.PollEvents()

glfw.Terminate()

Prefix Compatible Code

A compatibility layer is provided to be 1:1 compatible with other GLFW3 wrappers. Commonly, these don't drop the GLFW_ prefix from constants, nor the glfw prefix from functions.

To use the compatibility module, use `import cyglfw3.compatible as glfw`:

# needed if you're running the OS-X system python
try:
    from AppKit import NSApp, NSApplication
except:
    pass

import cyglfw3.compatible as glfw
if not glfw.glfwInit():
    exit()

window = glfw.glfwCreateWindow(640, 480, 'Hello World')
if not window:
    glfw.glfwTerminate()
    exit()

glfw.glfwMakeContextCurrent(window)
while not glfw.glfwWindowShouldClose(window):
    # Render here

    # Swap front and back buffers
    glfw.glfwSwapBuffers(window)

    # Poll for and process events
    glfw.glfwPollEvents()

glfw.glfwTerminate()

Installation

pip install cyglfw3

Manual Building

If you have trouble building CyGLFW3, please raise an issue on Github.

When specifying the include path, ensure that the GLFW directory is a sub-directory of that path. For example: the path /usr/local/include/GLFW would use include /usr/local/include

The lib path should contain the glfw library file.

OS-X / Linux

CyGLFW3 provides support for OS-X Homebrew and MacPorts.

Linux builds should work with any package manager.

python setup.py build_ext -i

Specifying an alternate GLFW installation path:

env CPATH=<include path> LIBRARY_PATH=<lib path> python setup.py build_ext -i

Windows

The following commands are untested, please report their success or failure.

set INCLUDE=%INCLUDE%;<path to headers>
set LIB=%LIB%;<path to lib>
python setup.py build_ext -i

Common Problems

  • PyOpenGL reports the OpenGL version as None and my GL functions do nothing!

You _must set an active context or your OpenGL calls will go no where:

glfw.MakeContextCurrent(window)

This is by design in GLFW3.

Dependencies

  • Python 2.7
  • Cython
  • GLFW 3

cyglfw3's People

Contributors

adamlwgriffiths avatar agrif avatar brianbruggeman avatar mkassner avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.