Hello Guest

Problem setting up display with core profile and forward compatability

  • 2 Replies
I am trying to learn OpenGL 3.3+ using the OprnGL SuperBible 5th Edition and LWJGL. I'm using Windows 7 x64 and have an ATI HD4870x2 with the Catalyst 11.1 drivers.

The code below is failing with the call to GL11.glClearColor(0f, 0f, 1f, 0f);.  I'm running the program with -Dorg.lwjgl.util.Debug=true and using lwjgl-debug.jar.

Code: [Select]
package net.jentz;

import org.lwjgl.Sys;
import org.lwjgl.input.Keyboard;
import org.lwjgl.openal.AL;
import org.lwjgl.opengl.ContextAttribs;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.PixelFormat;

public class Ogl33 {

  /** Game title */
  public static final String GAME_TITLE = "Ogl33";

  private static final boolean CTX_DEBUG = true;

  /** Exit the game */
  private static boolean finished;

   * Application init
   * @param args Commandline args
  public static void main(String[] args) {
    try {
    catch (Exception e) {
      Sys.alert(GAME_TITLE, "An error occured and the game will exit.");
    finally {

   * Initialize the game
   * @throws Exception if init fails
  private static void init() throws Exception {
    Display.setDisplayMode(new DisplayMode(1024, 768));

    // Setup OpenGL 3.3 forward-compatible core profile
    ContextAttribs ctxAttr = new ContextAttribs(3, 3);
    ctxAttr = ctxAttr.withForwardCompatible(true).withProfileCore(true).withProfileCompatibility(false).withDebug(CTX_DEBUG);

    PixelFormat pf = new PixelFormat(8, 0, 24, 8, 4);
    Display.create(pf, ctxAttr);
    GL11.glClearColor(0f, 0f, 1f, 0f);
    // Start up the sound system

   * Runs the game (the "main loop")
  private static void run() {
    while (!finished) {
      // Always call Window.update(), all the time

      if (Display.isCloseRequested()) {
        // Check for O/S close requests
        finished = true;
      else if (Display.isActive()) {
        // The window is in the foreground, so we should play the game
       // Display.sync(FRAMERATE);
      else {
        // The window is not in the foreground, so we can allow other stuff to run and
        // infrequently update
        try {
        catch (InterruptedException e) {
        if (Display.isVisible() || Display.isDirty()) {
          // Only bother rendering if the window is visible or dirty

   * Do any game-specific cleanup
  private static void cleanup() {
    // Stop the sound

    // Close the window

   * Do all calculations, handle input, etc.
  private static void logic() {
    // Example input handler: we'll check for the ESC key and finish the game instantly when it's pressed
    if (Keyboard.isKeyDown(Keyboard.KEY_ESCAPE)) {
      finished = true;

   * Render the current frame
  private static void render() {

Code: [Select]
Initial mode: 1920 x 1200 x 32 @59Hz
org.lwjgl.opengl.OpenGLException: Invalid enum (1280)
at org.lwjgl.opengl.Util.checkGLError(Util.java:59)
at org.lwjgl.opengl.GL11.glClearColor(GL11.java:575)
at net.jentz.Ogl33.init(Ogl33.java:59)
at net.jentz.Ogl33.main(Ogl33.java:29)
*** Alert ***Ogl33
An error occured and the game will exit.

Could not locate symbol glEnableClientStateiEXT
Could not locate symbol glDisableClientStateiEXT
Could not locate symbol glGetFloati_vEXT
Could not locate symbol glGetDoublei_vEXT
Could not locate symbol glGetPointeri_vEXT
Could not locate symbol glVertexWeighthNV
Could not locate symbol glVertexAttrib1hNV
Could not locate symbol glVertexAttrib2hNV
Could not locate symbol glVertexAttrib3hNV
Could not locate symbol glVertexAttrib4hNV
Could not locate symbol glVertexAttribs1hvNV
Could not locate symbol glVertexAttribs2hvNV
Could not locate symbol glVertexAttribs3hvNV
Could not locate symbol glVertexAttribs4hvNV

Changing from
Code: [Select]
ctxAttr = ctxAttr.withForwardCompatible(true).withProfileCore(true).withProfileCompatibility(false).withDebug(CTX_DEBUG);to
Code: [Select]
ctxAttr = ctxAttr.withForwardCompatible(false).withProfileCore(true).withProfileCompatibility(true).withDebug(CTX_DEBUG);works, but I am under the impression that it should work either way. since glClearColor() exists in the core profile.

Hello, I know the topic is quite old, but in case the problem remains...

i think that the problem arise from the use of EXT symbols

"Could not locate symbol glEnableClientStateiEXT"

In Core profile, use Core function glEnableClientState() (no EXT)



Offline spasi

  • *****
  • 2258
    • WebHotelier
Nah, that message is related to a missing entry point in the AMD driver, you see it when running with Debug=true.

Anyway, this is indeed an old post, but I've tried the code above and it works with the latest AMD driver and LWJGL version. Also, I don't think the problem was related to glClearColor, since you can't get Invalid enum (1280) from that. Util.checkGLError was probably catching an error that occurred before it.