OpenGLException: Invalid enum (1280) on GL_TEXTURE_CUBE_MAP_POSITIVE_X

Started by ryiden, May 18, 2007, 13:05:09

Previous topic - Next topic

ryiden

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.

Matzon

are you certain that you are running OpenGL 1.3+ drivers?

ryiden

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

ryiden

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.

ryiden

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?

ryiden

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.

Matzon