Search code examples
pythonopenglpyopenglopengl-compat

Pyopengl Blackscreen


While running this sample code on a GPU with OpenGL 3.1 support, the Pyopengl 3.1.5 (Python 3.8 & Windows10 Pro-64bit) window shows a Black Screen.

There are a few things missing in the sample code.
1. No color is specified for fragcolor.
2. Integer values are provided as inputs for glVetex2f(), instead of floats.
On rectifying the above issues and running the code, the screen is still Black.

# Script
import OpenGL
from OpenGL.GL import *
from  OpenGL.GLUT import * 
from OpenGL.GLU import * 
import io
print("Imports successful!")

w, h = 500,500

def poly_shape():     
    glBegin(GL_QUADS) 
    glColor4f(1.0,0.0,0.0,1.0)
    glVertex2f(100.0, 100.0)
    glVertex2f(200.0, 100.0) 
    glVertex2f(200.0, 200.0) 
    glVertex2f(100.0, 200.0) 
    glEnd()

def showScreen():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # Remove everything from screen (i.e. displays all white)
    glLoadIdentity() # Reset all graphic/shape's position
    poly_shape() # Draw function call
    glutSwapBuffers()

#------
glutInit()
glutInitDisplayMode(GLUT_RGBA) # Set the display mode to be colored
glutInitWindowSize(500, 500)   # Set the w and h of your window
glutInitWindowPosition(0, 0)   # Set the position at which this windows should appear
wind = glutCreateWindow("OpenGL Coding Practice") # Set a window title
glutDisplayFunc(showScreen)
glutIdleFunc(showScreen) # Keeps the window open
glutMainLoop()  # Keeps the above created window displaying/running in a loop

Solution

  • In the sample code ,the code for Mvp (Model-View-Projection) matrix was missing .On adding it under the ShowScreen() function,the draw call(square in this case) render's in the viewport .

    Screen rendering with Immediate Mode glsl script

    import OpenGL
    from OpenGL.GL import *
    from  OpenGL.GLUT import * 
    from OpenGL.GLU import * 
    import io
    print("Imports successful!")
    
    
    w, h = 500,500
    
    
    def draw_shape():
        glBegin(GL_QUADS) 
        glColor4f(1.0,0.0,0.0,1.0)
        glVertex2f(100.0, 100.0)
        glVertex2f(200.0, 100.0) 
        glVertex2f(200.0, 200.0) 
        glVertex2f(100.0, 200.0) 
        glEnd() 
        glFlush()
    
    def showScreen():
        glViewport(0, 0, 500, 500)
        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        glOrtho(0, 500, 500, 0, -1, 1)
        glMatrixMode(GL_MODELVIEW)
        glLoadIdentity()
    
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # Remove everything from screen (i.e. displays all white)
        glLoadIdentity() # Reset all graphic/shape's position
    
        draw_shape() # Draw function
    
        glutSwapBuffers()
    
    #---Section 3---
    glutInit()
    glutInitDisplayMode(GLUT_RGBA) # Set the display mode to be colored
    glutInitWindowSize(500, 500)   # Set the w and h of your window
    glutInitWindowPosition(0, 0)   # Set the position at which this windows should appear
    wind = glutCreateWindow("OpenGL Coding Practice") # Set a window title
    
    
    glutDisplayFunc(showScreen)
    glutIdleFunc(showScreen) # Keeps the window open
    glutMainLoop()  # Keeps the above created window displaying/running in a loop*