LWJGL Forum

Programming => Lightweight Java Gaming Library => Topic started by: ryiden on May 18, 2007, 13:05:09

Title: OpenGLException: Invalid enum (1280) on GL_TEXTURE_CUBE_MAP_POSITIVE_X
Post by: ryiden on May 18, 2007, 13:05:09
I am unable to create a glTexImage2D with the parameter GL_TEXTURE_CUBE_MAP_POSITIVE_X. The function glTexImage2D always creates an OpenGLException, but GL_TEXTURE_CUBE_MAP_POSITIVE_X is a valid parameter.
Title: Re: OpenGLException: Invalid enum (1280) on GL_TEXTURE_CUBE_MAP_POSITIVE_X
Post by: Matzon on May 18, 2007, 13:22:24
are you certain that you are running OpenGL 1.3+ drivers?
Title: Re: OpenGLException: Invalid enum (1280) on GL_TEXTURE_CUBE_MAP_POSITIVE_X
Post by: ryiden on May 18, 2007, 15:19:11
The command glxinfo gives me the following output:

name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: NVIDIA Corporation
server glx version string: 1.4
server glx extensions:
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig,
    GLX_SGIX_pbuffer, GLX_SGI_video_sync, GLX_SGI_swap_control,
    GLX_EXT_texture_from_pixmap, GLX_ARB_multisample
client glx vendor string: NVIDIA Corporation
client glx version string: 1.4
client glx extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_visual_info,
    GLX_EXT_visual_rating, GLX_EXT_import_context, GLX_SGI_video_sync,
    GLX_NV_swap_group, GLX_NV_video_out, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer,
    GLX_SGI_swap_control, GLX_NV_float_buffer, GLX_ARB_fbconfig_float,
    GLX_EXT_fbconfig_packed_float, GLX_EXT_texture_from_pixmap
GLX version: 1.3
GLX extensions:
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_SGIX_fbconfig,
    GLX_SGIX_pbuffer, GLX_SGI_video_sync, GLX_SGI_swap_control,
    GLX_EXT_texture_from_pixmap, GLX_ARB_multisample,
    GLX_ARB_get_proc_address
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce4 Ti 4200 with AGP8X/AGP/SSE2
OpenGL version string: 1.5.8 NVIDIA 96.31
OpenGL extensions:
    GL_ARB_depth_texture, GL_ARB_imaging, GL_ARB_multisample,
    GL_ARB_multitexture, GL_ARB_occlusion_query, GL_ARB_pixel_buffer_object,
    GL_ARB_point_parameters, GL_ARB_point_sprite, GL_ARB_shadow,
    GL_ARB_shader_objects, GL_ARB_shading_language_100,
    GL_ARB_texture_border_clamp, GL_ARB_texture_compression,
    GL_ARB_texture_cube_map, GL_ARB_texture_env_add,
    GL_ARB_texture_env_combine, GL_ARB_texture_env_dot3,
    GL_ARB_texture_mirrored_repeat, GL_ARB_texture_rectangle,
    GL_ARB_transpose_matrix, GL_ARB_vertex_buffer_object,
    GL_ARB_vertex_program, GL_ARB_vertex_shader, GL_ARB_window_pos,
    GL_S3_s3tc, GL_EXT_texture_env_add, GL_EXT_abgr, GL_EXT_bgra,
    GL_EXT_blend_color, GL_EXT_blend_minmax, GL_EXT_blend_subtract,
    GL_EXT_compiled_vertex_array, GL_EXT_Cg_shader,
    GL_EXT_draw_range_elements, GL_EXT_fog_coord,
    GL_EXT_gpu_program_parameters, GL_EXT_multi_draw_arrays,
    GL_EXT_packed_pixels, GL_EXT_paletted_texture, GL_EXT_pixel_buffer_object,
    GL_EXT_point_parameters, GL_EXT_rescale_normal, GL_EXT_secondary_color,
    GL_EXT_separate_specular_color, GL_EXT_shadow_funcs,
    GL_EXT_shared_texture_palette, GL_EXT_stencil_wrap, GL_EXT_texture3D,
    GL_EXT_texture_compression_s3tc, GL_EXT_texture_cube_map,
    GL_EXT_texture_edge_clamp, GL_EXT_texture_env_combine,
    GL_EXT_texture_env_dot3, GL_EXT_texture_filter_anisotropic,
    GL_EXT_texture_lod, GL_EXT_texture_lod_bias, GL_EXT_texture_object,
    GL_EXT_timer_query, GL_EXT_vertex_array, GL_HP_occlusion_test,
    GL_IBM_rasterpos_clip, GL_IBM_texture_mirrored_repeat,
    GL_KTX_buffer_region, GL_NV_blend_square, GL_NV_copy_depth_to_color,
    GL_NV_depth_clamp, GL_NV_fence, GL_NV_fog_distance,
    GL_NV_light_max_exponent, GL_NV_multisample_filter_hint,
    GL_NV_occlusion_query, GL_NV_packed_depth_stencil, GL_NV_pixel_data_range,
    GL_NV_point_sprite, GL_NV_register_combiners, GL_NV_register_combiners2,
    GL_NV_texgen_reflection, GL_NV_texture_compression_vtc,
    GL_NV_texture_env_combine4, GL_NV_texture_rectangle, GL_NV_texture_shader,
    GL_NV_texture_shader2, GL_NV_texture_shader3, GL_NV_vertex_array_range,
    GL_NV_vertex_array_range2, GL_NV_vertex_program, GL_NV_vertex_program1_1,
    GL_SGIS_generate_mipmap, GL_SGIS_multitexture, GL_SGIS_texture_lod,
    GL_SGIX_depth_texture, GL_SGIX_shadow, GL_SUN_slice_accum
Title: Re: OpenGLException: Invalid enum (1280) on GL_TEXTURE_CUBE_MAP_POSITIVE_X
Post by: ryiden on May 19, 2007, 11:54:21
From the documentation:
GL_INVALID_ENUM is generated if target is not GL_TEXTURE_2D, GL_PROXY_TEXTURE_2D, GL_PROXY_TEXTURE_CUBE_MAP, GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, or GL_TEXTURE_CUBE_MAP_NEGATIVE_Z.

GL_INVALID_ENUM is generated if target is one of the six cube map 2D image targets and the width and height parameters are not equal.

In my Application:
The first error can be excluded because I am using GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, and GL_TEXTURE_CUBE_MAP_NEGATIVE_Z.

The second error can be excluded because I am using the same image for all six targets.
Title: Re: OpenGLException: Invalid enum (1280) on GL_TEXTURE_CUBE_MAP_POSITIVE_X
Post by: ryiden on May 19, 2007, 11:59:30
I have the following function to build a cube map:

  public Texture[] loadCubeMap(File left, File right, File bottom, File top, File front,
                               File back) throws IOException
  {
    Texture[] cubeTexture = Texture.createTextures(6);
    loadTexImage2D(left, cubeTexture[0], GL13.GL_TEXTURE_CUBE_MAP_NEGATIVE_X);
    loadTexImage2D(right, cubeTexture[1], GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_X);
    loadTexImage2D(bottom, cubeTexture[2], GL13.GL_TEXTURE_CUBE_MAP_NEGATIVE_Y);
    loadTexImage2D(top, cubeTexture[3], GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_Y);
    loadTexImage2D(front, cubeTexture[4], GL13.GL_TEXTURE_CUBE_MAP_NEGATIVE_Z);
    loadTexImage2D(back, cubeTexture[5], GL13.GL_TEXTURE_CUBE_MAP_POSITIVE_Z);
    GL11.glTexParameterf(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_WRAP_S, GL11.GL_LINEAR);
    GL11.glTexParameterf(GL13.GL_TEXTURE_CUBE_MAP, GL11.GL_TEXTURE_WRAP_T, GL11.GL_LINEAR);
    GL11.glTexParameterf(GL13.GL_TEXTURE_CUBE_MAP, GL12.GL_TEXTURE_WRAP_R, GL11.GL_LINEAR);
    GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);
    GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
    return cubeTexture;
  }


With the following help function:

  protected void loadTexImage2D(File resource, Texture texture, int target) throws IOException
  {
    BufferedImage textureImage = ImageToolkit.loadImage(resource);
    textureImage = ImageToolkit.rescaleImage(textureImage);
    texture.target = target;
    texture.internalFormat = ARBTextureCompression.GL_COMPRESSED_RGBA_ARB;
    texture.width = textureImage.getWidth();
    texture.height = textureImage.getHeight();
    if (textureImage.getColorModel().hasAlpha())
    {
      texture.format = GL11.GL_RGBA;
    }
    else
    {
      texture.format = GL11.GL_RGB;
    }
    texture.type = GL11.GL_UNSIGNED_BYTE;
    ByteBuffer textureBuffer = ImageToolkit.createByteBuffer(textureImage);
    texture.bind();
    GL11.glTexImage2D(texture.target, 0, texture.internalFormat, texture.width, texture.height,
                      0, texture.format, texture.type, textureBuffer);
  }


And this is the client:

  File file = new File("./textures/tex.png");
  loadCubeMap(file, file, file, file, file, file);


Can anyone help me?
Title: Re: OpenGLException: Invalid enum (1280) on GL_TEXTURE_CUBE_MAP_POSITIVE_X
Post by: ryiden on May 19, 2007, 14:17:46
My fault was to create the cube six pack with six different texture ID's. With one bounded texture ID for all six targets it works fine.
Title: Re: OpenGLException: Invalid enum (1280) on GL_TEXTURE_CUBE_MAP_POSITIVE_X
Post by: Matzon on May 19, 2007, 16:31:44
thanks for posting the solution to your problem  :)