From 2e3c168792b05f6c77c479fa12c259d98b8bed3c Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 6 Feb 2006 11:11:09 +0000 Subject: [PATCH] OpenGL: Made generated ContextCapabilities only try to load super class symbols if a sub class is supported. This avoids spurious 'Could not locate symbol' warnings in debug mode (glLoadProgramNV on ATI hardware) --- .../org/lwjgl/opengl/ContextCapabilities.java | 17 ++++++++++++++--- .../ContextCapabilitiesGenerator.java | 19 ++++++++++++++++--- .../ContextGeneratorProcessorFactory.java | 3 +-- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/generated/org/lwjgl/opengl/ContextCapabilities.java b/src/generated/org/lwjgl/opengl/ContextCapabilities.java index 18fdee08..8e4ddfd5 100644 --- a/src/generated/org/lwjgl/opengl/ContextCapabilities.java +++ b/src/generated/org/lwjgl/opengl/ContextCapabilities.java @@ -2094,9 +2094,20 @@ public class ContextCapabilities { throw new LWJGLException("GL11 not supported"); GLContext.setCapabilities(this); Set supported_extensions = GLContext.getSupportedExtensions(); - supported_extensions.add("GL_ARB_buffer_object"); - supported_extensions.add("GL_ARB_program"); - supported_extensions.add("GL_NV_program"); + if (supported_extensions.contains("GL_ARB_fragment_program")) + supported_extensions.add("GL_ARB_program"); + if (supported_extensions.contains("GL_ARB_pixel_buffer_object")) + supported_extensions.add("GL_ARB_buffer_object"); + if (supported_extensions.contains("GL_ARB_vertex_buffer_object")) + supported_extensions.add("GL_ARB_buffer_object"); + if (supported_extensions.contains("GL_ARB_vertex_program")) + supported_extensions.add("GL_ARB_program"); + if (supported_extensions.contains("GL_EXT_pixel_buffer_object")) + supported_extensions.add("GL_ARB_buffer_object"); + if (supported_extensions.contains("GL_NV_fragment_program")) + supported_extensions.add("GL_NV_program"); + if (supported_extensions.contains("GL_NV_vertex_program")) + supported_extensions.add("GL_NV_program"); if (supported_extensions.contains("GL_ARB_buffer_object") && !ARB_buffer_object_initNativeFunctionAddresses()) supported_extensions.remove("GL_ARB_buffer_object"); if (supported_extensions.contains("GL_ARB_color_buffer_float") && !ARB_color_buffer_float_initNativeFunctionAddresses()) diff --git a/src/java/org/lwjgl/util/generator/ContextCapabilitiesGenerator.java b/src/java/org/lwjgl/util/generator/ContextCapabilitiesGenerator.java index af6cedcb..03dd62bb 100644 --- a/src/java/org/lwjgl/util/generator/ContextCapabilitiesGenerator.java +++ b/src/java/org/lwjgl/util/generator/ContextCapabilitiesGenerator.java @@ -85,6 +85,19 @@ public class ContextCapabilitiesGenerator { return EXTENSION_PREFIX + interface_name; } + public static void generateSuperClassAdds(PrintWriter writer, InterfaceDeclaration d) { + Collection super_interfaces = d.getSuperinterfaces(); + if (super_interfaces.size() > 1) + throw new RuntimeException(d + " extends more than one other interface"); + if (super_interfaces.size() == 1) { + InterfaceType super_interface = super_interfaces.iterator().next(); + writer.print("\t\tif (" + CACHED_EXTS_VAR_NAME + ".contains(\""); + writer.println(translateFieldName(d.getSimpleName()) + "\"))"); + writer.print("\t\t\t"); + generateAddExtension(writer, super_interface.getDeclaration()); + } + } + public static void generateInitializer(PrintWriter writer, InterfaceDeclaration d) { String translated_field_name = translateFieldName(d.getSimpleName()); writer.print("\t\tthis." + translated_field_name + " = "); @@ -145,13 +158,13 @@ public class ContextCapabilitiesGenerator { writer.println(translateFieldName(d.getSimpleName()) + "\");"); } else { writer.print("\t\tGLContext." + Utils.STUB_INITIALIZER_NAME + "(" + Utils.getSimpleClassName(d)); - writer.println(".class, supported_extensions, \"" + translateFieldName(d.getSimpleName()) + "\");"); + writer.println(".class, " + CACHED_EXTS_VAR_NAME + ", \"" + translateFieldName(d.getSimpleName()) + "\");"); } } } - public static void generateAddExtension(PrintWriter writer, InterfaceDeclaration d) { - writer.print("\t\t" + CACHED_EXTS_VAR_NAME + ".add(\""); + private static void generateAddExtension(PrintWriter writer, InterfaceDeclaration d) { + writer.print(CACHED_EXTS_VAR_NAME + ".add(\""); writer.println(translateFieldName(d.getSimpleName()) + "\");"); } diff --git a/src/java/org/lwjgl/util/generator/ContextGeneratorProcessorFactory.java b/src/java/org/lwjgl/util/generator/ContextGeneratorProcessorFactory.java index 48432d59..73ff0e08 100644 --- a/src/java/org/lwjgl/util/generator/ContextGeneratorProcessorFactory.java +++ b/src/java/org/lwjgl/util/generator/ContextGeneratorProcessorFactory.java @@ -139,8 +139,7 @@ public class ContextGeneratorProcessorFactory implements AnnotationProcessorFact ContextCapabilitiesGenerator.generateInitStubsPrologue(writer, context_specific); for (TypeDeclaration typedecl : interface_decls) { InterfaceDeclaration interface_decl = (InterfaceDeclaration)typedecl; - if (!Utils.isFinal(interface_decl)) - ContextCapabilitiesGenerator.generateAddExtension(writer, interface_decl); + ContextCapabilitiesGenerator.generateSuperClassAdds(writer, interface_decl); } for (TypeDeclaration typedecl : interface_decls) { InterfaceDeclaration interface_decl = (InterfaceDeclaration)typedecl;