Readme: | MorphOS TinyGL update 2024-09-29 ================================ This is the tenth public MorphOS TinyGL update resulting from the TinyGL bounty at https://tinygl.molsen.co.za/.
The main changes in this update are: - Support for framebuffer objects. - Much improved texture and pixel format handling.
See later in this file for a more detailed list of changes.
Please note that support for the Evergreen and Northern Islands families of Radeon chips is missing in this update, but will be readded in a later update.
Which Radeon family does my Radeon belong to? --------------------------------------------- Later in this readme there is information to help you identify which Radeon family your graphics card belongs to. This update covers the R200, R300, R400 and R500 families of Radeon chips. Some features are currently only available for some Radeon models. Find your graphics card in the list below to see if a particular feature or example applies to your system.
Examples -------- This update contains three examples that have been used to test some of the new functionality introduced in this TinyGL update.
The "Cube Map Skybox" example demonstrates the use of OpenGL cube maps to render what's known as a skybox, a static background often used in games and applications to give the appearance of a detailed background and sky with minimal hardware processing requirements.
The "Bump2D" example demonstrates the use of fragment programs to create effects not possible with the fixed function OpenGL pipeline. In this case it creates a classic bump mapping effect, giving the illusion of detailed lighting being applied to a surface. Parts of the surface - the metallic parts - also have extra lighting applied to them, to give the illusion of them being shiny. In this update, this example only works on Radeon graphics cards in the R300 and R400 families. Future updates will make this example work on all supported Radeon graphics cards. Many thanks to Andre Siegel for supplying the artwork for this example!
The "Shader Test" example demonstrates the use of OpenGL vertex and fragment shaders to create effects that would not possible with the fixed function OpenGL pipeline. This example uses a vertex shader to animate the rendered object and a fragment shader to create custom lighting effects as well as conditional discarding of output fragments, creating the illusion that the rendered model is more detailed than it actually is.
"ShaderBoy" is an application that allows you to test and play around with shaders. It has several different presets and allows you to edit vertex and fragment shaders, with a live display of the result of those shaders. It also allows you to edit various OpenGL states including textures and lighting. "ShaderBoy" was developed by Antoine "Tcheko" Dubourg and I'd like to extend a big thank you to him for developing it and allowing me to include it in the TinyGL update!
SDK --- The SDK directory contains updates to the MorphOS SDK and source code for the examples included in this update. The SDK update has to be installed manually by copying the contents of the SDK/GG directory to your SDK GG directory. You can copy the files by executing the following commands from a shell, with the current directory being the TinyGL update directory:
delete gg:ppc-morphos/lib/libGL.a copy SDK/GG/#? gg: all quiet clone
Please note that there's no check to make sure that your SDK is not newer than the files contained in this update. Only install the SDK files if your currently installed SDK is older than this TinyGL update.
Also please note that any software compiled with the updated SDK will require tinygl.library version 53.0 or higher, and thus either MorphOS 3.18 or MorphOS 3.17 + this separate TinyGL update. If you manually open tinygl.library, you _must_ update your code to request version 53!
If you manually create your TinyGL context with a call to GLInit(), you must also set your desired context version to get access to all the features and fixes contained in newer TinyGL versions. The easiest way to do this is to call TGLSetAutomaticContextVersion(TinyGLBase, context). This will automatically set the context version to the highest version supported both by the SDK and by the version of tinygl.library running on the system the software is executing on.
To manually set a specific context version, you can call TGLSetContextVersion(context, version), where version is one of the TGL_CONTEXT_VERSION_X_Y constants defined in tgl/gl.h. Please note that attempting to set a context version that's newer than what is supported by the version of tinygl.library running on the system the software is executing on will be ignored.
To build the examples, go to the SDK/Examples directory and run the following command:
make
Changes from 2024-05-13 to 2024-09-29 ------------------------------------- freeglut.library: - Library version is now 53.2. - Made changes to support setting the TinyGL context version automatically.
Radeon: - Monitor version is now 52.43. - Improved the Radeon cache flushing code for the R100, R200, R300, R400 and R500 families of Radeon chips. - Fixed an issue that could cause corrupted rendering with full screen applications in certain resolutions.
tinygl.library: - Library version is now 53.10. - Completely redesigned and rewrote the pixel format and pixel format conversion handling. Every valid combination of OpenGL internal format, format and type is now handled correctly within the limits of what the driver and hardware support. This change affects every OpenGL function that deals with exchanging pixel data between TinyGL and the application. - Added a concept of context versions to TinyGL. Which OpenGL extensions are advertised, and the functionality of certain functions, depends on the context version chosen by the application. This allows TinyGL to advertise new OpenGL extensions and to fix wrong behaviours in existing functions where already released software might depend on the wrong behaviour. o Software that links against libGL.a and uses its automatic opening of tinygl.library and context creation will automatically get the highest context version supported by both the SDK the software is compiled with and the tinygl.library the software is running on. o Software that manually creates TinyGL contexts must set its desired context version itself. TGLSetAutomaticContextVersion() can be called to perform the same operation as above. - Fixed glCopyTexImage2D() and glCopyTexSubImage2D() to not flip the copied image on the y axis. This fix is only available when the context version is >= 53.9. - Optimised glCopyTexSubImage2D(). - Fixed glTexImage1D() to work as part of a display list. - Added better OpenGL error handling in the following functions: o glCopyTexImage2D() o glTexImage1D() o glTexImage2D() o glTexSubImage1D() o glTexSubImage2D() - Fixed glGetTexImage() to support cube maps. - When a driver needs to evict a depth or stencil buffer from video memory due to being out of free video memory, TinyGL now saves the contents of this buffer and restores the buffer contents again before it is used again the next time. This prevents misrendered frames in such situations. - Fixed glGetShaderiv() to include the terminating null character in the length returned when querying GL_OBJECT_SHADER_SOURCE_LENGTH_ARB. - Fixed various problems in glBitmap(), glRasterPos#?() and glWindowPos#?() where these functions could fail to function correctly depending on what TinyGL functions had previously been called. - Added point parameter support. - Fixed glBitmap() to not cause memory corruption when used with a width or height of more than 63. - Added support for reading the depth and stencil buffers with glReadPixels(). - Added support for getting GL_DEPTH_BITS via glGet#?(). - Implemented the following functions: o glGetInfoLogARB() o glGetObjectParameterivARB() - The following functions now have proper OpenGL error reporting: o glAttachShader() o glCompileShader() o glCreateProgram() o glCreateShader() o glGetAttribLocation() o glGetProgramInfoLog() o glGetProgramiv() o glGetShaderInfoLog() o glGetShaderiv() o glGetUniformLocation() o glIsProgram() o glIsShader() o glLinkProgram() o glShaderSource() o glUseProgram() - New OpenGL extensions advertised: o GL_ARB_framebuffer_object o GL_EXT_framebuffer_object
r200.library: - Library version is now 53.6. - Added full support for framebuffer objects. - Added support for multiple new texture formats. - Added support for multiple new depth and depth/stencil formats. - Updated to work with the new TinyGL pixel format handling. This also adds support for several texture formats in the driver that were not supported before. - Fixed a bug that could cause a deadlock when the system is under high video memory pressure. - Fixed a bug that could in some rare cases cause video memory corruption when a depth or stencil buffer was being used. - Fixed texture matrices to work on texture units >= 1. - Fixed a bug that could cause misrendering with certain texture combiner setups if texture unit 0 was not enabled. - Fixed a bug where glCopyTexImage2D() would not copy all the specified pixels depending on the context size and scissor setup. - Fixed a bug where zero page reads and writes could occur when an OpenGL context was recreated. - Fixed vertex buffer objects to work again.
r300.library: - Library version is now 53.12. - Added full support for framebuffer objects. - Added support for multiple new texture formats, including floating point and signed normalised formats. - Added support for multiple new depth and depth/stencil formats. - Updated to work with the new TinyGL pixel format handling. This also adds support for several texture formats in the driver that were not supported before. - Fixed a bug that could cause a deadlock when the system is under high video memory pressure. - Added support for setting point parameters.
Changes from 2023-08-14 to 2024-05-13 ------------------------------------- freeglut.library: - No longer allocates a depth buffer if the application does not request it. - Fixed a memory leak.
tinygl.library: - Fixed glReadPixels() to not lose the alpha channel when the application requests the data in an unusual pixel format. - Fixed glReadPixels() to correctly handle GL_PACK_ALIGNMENT, GL_PACK_ROW_LENGTH and GL_PACK_SKIP_ROWS. - Added pixel buffer object support. - Fixed the handling of various pixel formats when doing pixel format conversion. - Implemented the following functions: o glGetBufferPointerv() o glGetBufferSubData() o glMapBuffer() o glUnmapBuffer() - Fixed an issue that could cause the wrong texture to be used after calling glBitmap() or glDrawPixels(). - Updated to use the new framebuffer object driver API internally for all buffer handling. - Initial work on implementing framebuffer object support.
r200.library: - Added initial support for framebuffer objects. - Fixed a bug that causes video memory corruption when using cube map textures.
r300.library: - Added initial support for framebuffer objects. - Fixed a bug that causes video memory corruption when using cube map textures. - Improved the fragment shader compiler for R300 and R400 chips to better handle texture indirections. - Added support for new opcodes to the fragment shader compiler. - Fixed a bug that could cause the wrong texture units to be enabled when using shaders. - Added support for 1D textures in the R500 fragment shader compiler.
Changes from 2022-12-27 to 2023-08-14 ------------------------------------- freeglut.library: - Library version is now 53.1 - Now zeroes out the application's OpenGL context pointer when the application closes a GLUT window that was the currently active GLUT window for OpenGL rendering. Prevents accidentally using a deleted OpenGL context.
tinygl.library: - Library version is now 53.8 - No longer attempts to update fixed-function state in the driver when fixed-function-as-shaders is active, as the latter replaces the former. - All OpenGL 2.1 states that are settable glPixelStoref() and glPixelStorei() now have correct default values and can be queried with the relevant glGet#?() functions. Please note that even though correct state is being kept now, not all functionality is fully implemented. - 1D textures are now natively supported by drivers instead of being emulated as 2D textures by tinygl.library. - Fixed a bug where a texture unit's base texture format was not updated when enabling or disabling 1D, 2D or cubemap texturing for that unit, which could cause the wrong texture function to be applied to that unit. - When an application causes an OpenGL error to get generated, tinygl.library now generates debug output to notify developers of this error. For some errors, an explanation of why the error was generated is also included.
r200.library: - Library version is now 53.5 - Added driver-native support for 1D textures.
r300.library: - Library version is now 53.11 - Added driver-native support for 1D textures. - Fixed a bug where in certain very rare cases, uniform values updated by an application would not immediately take effect in hardware. - Optimised shader state handling, resulting in faster execution of applications that frequently switch between different shaders.
r600.library: - New driver that adds support for Evergreen and Northern Islands based Radeons. Please note that this driver is still work-in-progress and that misrendering and even crashes should be expected.
SDK: - Updated libGL.a and libglut.a to better coexist. Fixes a problem where GLUT applications could crash depending on the order in which those two libraries were linked into the appliction.
Changes from 2022-12-21 to 2022-12-27 ------------------------------------- tinygl.library: - Library version is now 53.7 - Fixed multiple issues with GL_RGB5_A1 textures. - Fixed a problem with ARB fragment programs that caused such programs that used non-consecutive texture image units to fail. For example a program that used texture unit 0 and texture unit 2, but not texture unit 1 would misrender. - Fixed a problem with mipmapped cubemaps where such textures would get treated as 2D textures rather than cube map textures. This problem only affected textures which are mipmap complete.
r300.library: - Library version is now 53.10. - Added support for GL_RGB5_A1 textures.
Changes from 2022-12-16 to 2022-12-21 ------------------------------------- tinygl.library: - Library version is now 53.6 - Fixed-function-as-shaders: Fixed the the GL_BLEND texture environment function for textures with a base format of GL_RGB. - Fixed-function-as-shaders: Fixed glColorMaterial() with mode set to either GL_AMBIENT or GL_DIFFUSE. - Fixed-function-as-shaders: Fixed alpha channel output from the vertex shader when GL_LIGHTING is enabled. - Fixed crashes and misrenders when resizing a window mode context while an ARB or GLSL program is active.
SDK: - Added function pointer typedefs for every OpenGL function.
Changes from 2022-10-19 to 2022-12-16 ------------------------------------- tinygl.library: - Library version is now 53.5 - Implemented the fixed function OpenGL vertex and fragment pipeline as dynamically generated shaders. This implementation is used on graphics cards that support shaders instead of the previous limited fixed function support in hardware/drivers. - Now supports setting and retrieving all OpenGL 2.1 glEnable() and glDisable() states, although no actualy functionality has been added for most of the new states yet. - Added support for GL_COLOR_SUM. - Fixed a problem where using glBufferData() to overwrite the contents of an existing vertex buffer object could lead to the new data not being used by the driver right away. - glGetBufferParameteriv() now supports querying the following attributes: GL_BUFFER_ACCESS, GL_BUFFER_MAPPED and GL_BUFFER_USAGE. - glTexGen#?() now reject setting GL_TEXTURE_GEN_MODE to GL_SPHERE_MAP for the GL_R and GL_Q coordinates, and setting GL_TEXTURE_GEN_MODE to GL_REFLECTION_MAP for the GL_Q coordinate. - When using TinyGL to render directly to a window, and that window is being resized, TinyGL will no longer overwrite the window borders. - Several other problems related to using TinyGL to render directly to a window, that could cause TinyGL to misbehave and misrender, have been fixed. - The ARB program parser now correctly parses and compiles "state.material.X" operands, and correctly handles accesses to "state.light.X" and "state.lightmodel.X". - ARB programs that access transposed state matrices now work correctly. - Setting and getting GL_TEXTURE_GEN_Q now works correctly. - In ARB programs, several state variables (accessed via 'state.' in the program source code) were not automatically updated in hardware when the OpenGL state changed. This has now been fixed. - Revamped how TinyGL keeps track of what vertex data is required to complete a draw call. Previously TinyGL could in some cases supply either not enough data, causing misrendering, or too much data, causing performance degradation. - When using immediate mode rendering (via glBegin()), TinyGL now keeps all 4 components of the texture coordinates passed and not just the first two. This makes for example cube maps and texture matrices work when using with immediate mode. - Added support for setting GL_LIGHT_MODEL_COLOR_CONTROL via glLightModel#?(). - Added support for getting the following states via glGet#?(): o GL_CURRENT_SECONDARY_COLOR o GL_INDEX_MODE o GL_LIGHT_MODEL_COLOR_CONTROL o GL_RGBA_MODE o GL_SECONDARY_COLOR_ARRAY_POINTER - The initial immediate mode normal value when creating a new context has been fixed to correspond to the value required by OpenGL. - Added support for supplying secondary colours to OpenGL via glSecondaryColor#?(). - Deleting a vertex buffer object that was currently bound to the normal array would previously keep a stale pointer to the delete vertex buffer object in the vertex array state, potentially leading to TinyGL trying to use the already deleted vertex buffer object. - If the driver fails to compile an ARB program, the driver's error message is now passed on to the OpenGL application, rather than just returning a generic error message and discarding the driver error message. - Using glBitmap() while a program/shader or a cubemap texture is active no longer fails. - The glWindowPos#?() set of functions have been fixed to correctly interpret the y coordinate is having its origin at the bottom of the screen rather than the top of the screen. This primarily caused some OpenGL example code to render status text at the bottom of the display instead of the top, or vice versa. o Please note that to preserve compatibility with existing software that expects the wrong behaviour, the standards compliant behaviour is only activated for software that calls tglEnableNewExtensions(). - TinyGL's handling of the 'default' textures for each target (texture ID 0) was broken and didn't take into account the different texture target types (GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP, etc). This caused misrendering with mostly OpenGL example apps that reused the default OpenGL texture ID for rendering cube maps, instead of allocating a new texture for it. - The default state for OpenGL lights is now initialised correctly when creating a new context. Programs that use the default light position and never sets a position of their own now work correctly. - The following functions now have proper OpenGL error reporting: o glBindBuffer() o glBufferData() o glBufferSubData() o glDeleteBuffers() o glDisableClientState() o glEnableClientState() o glGetBufferParameteriv o glIsBuffer() o glLightf() o glLightfv() o glLighti() o glLightiv() o glLightModeli() o glLightModeliv() o glLightModelf() o glLightModelfv() - New OpenGL extensions advertised: o GL_EXT_secondary_color
r200.library: - Library version is now 53.4. - Added support client programs directly supplying the secondary OpenGL colour.
r300.library: - Library version is now 53.9. - Added support client programs directly supplying the secondary OpenGL colour. - Added support for several previously unsupported opcodes in the vertex program compiler and in the fragment program compilers for both R300/R400 and R500. - Fixed a bug that would lead to a Radeon hardware crash when trying to use a vertex program that used no constant data at all. - Fixed a bug where using a kill/discard instruction in a fragment program after sampling a texture could lead to program compilation failing. - Fixed a bug that would in certain cases lead to misrendering when using more than one set of texture coordinates. - Fixed a bug that could cause wrong texture rendering when switching between using programs/shaders and fixed function rendering.
freeglut.library: - New port of FreeGLUT version 3.4.0 to MorphOS. This supercedes TinyGL's built-in GLUT support, is a lot more feature complete and makes it easier to port GLUT OpenGL examples to MorphOS.
SDK: - Includes have been reworked a bit to be more MorphOS-like. clib/tinygl_protos.h is now a proper clib include that contains just the prototypes of tinygl.library's public functions. - the includes now define GL_VERSION_x_y, with x and y corresponding to the OpenGL versions supported by the includes. - For each OpenGL extension supported, the includes now define a preprocessor macro with the same name as the OpenGL extension, e.g. GL_ARB_vertex_buffer_object. - Contains includes and link library for freeglut.library.
Changes from 2022-10-05 to 2022-10-19 ------------------------------------- tinygl.library: - Library version is now 53.4 - Fixed the default settings for vertex attrib arrays. - Fixed a use-after-free of deleted vertex buffer objects in certain edge cases. - Added support for querying GL_MAX_VERTEX_ATTRIBS.
r300.library: - Library version is now 53.8 - Optimised the driver to use slightly fewer fragment program temporary registers. - Fixed user clip planes (ie, glClipPlane()) for clip planes other than clip plane 0. - Fixed a problem that in certain situations could cause R500-based Radeons to misrender when _not_ using fragment shaders/programs.
Changes from 2022-09-08 to 2022-10-05 ------------------------------------- tinygl.library: - Library version is now 53.3 - Fixed a bug that could cause problems using certain OpenGL state values and matrices in shaders.
r300.library: - Library version is now 53.7 - Added vertex and fragment shader support for R500. - Added support for the exp2() and log2() functions in vertex shaders. - Fixed an off-by-one bug that caused the Radeon hardware to execute one more instruction than was actually contained in the vertex program, causing unpredictable outcome. - Fixed a bug that could cause vertex shaders using a large amount of temporary registers to misbehave. - Fixed an oversight in the fragment program compiler that caused fragment programs on R300/R400 to sometimes erroneously consider a fragment kill instruction to start a new fragment program stage, making some fragment programs fail to compile where they should have worked. - Added a simple optimisation to the R300/R400 fragment program compiler to try the number of fragment program stages consumed. - Fixed a problem that could make certain conditional comparisons in vertex shaders to fail to compile. - Added an optimisation pass to reduce the number of temporary registers used. Currently only enabled for vertex programs and R500 fragment programs, with R300 fragment programs still to come. - Fixed the reading of gl_FragCoord in fragment shaders where a vertex shader is also present.
Changes from 2022-09-04 to 2022-09-08 ------------------------------------- tinygl.library: - Library version is now 53.2. - Reading gl_ModelViewProjectionMatrix in a shader now works correctly. - Shaders now work correctly after window resize. - Similarly fixed a corner case issue with textures after window resize. - Fixed a bug making program objects without both a vertex and a fragment shader present fail.
r300.library: - Library version is now 53.6. - Now supports shaders that read back from output registers. - Now supports shaders which use write masks in combination with texture instructions. - Fixed the fragment shader compiler to ignore source register swizzles for unused source register components in texture instructions. - Optimised the swizzle emulation of the fragment shader compiler, resulting in smaller and faster compiled shaders.
Changes from 2022-08-05 to 2022-09-04 ------------------------------------- tinygl.library: - Library version is now 53.1. - Added support for OpenGL shaders. - Fixed glMultiTexCoord#?(), which was broken in the previous beta release. - Fixed glClientActiveTexture() to properly validate app input and report the required OpenGL errors. - Fixed glBindTexture() to disallow binding a texture to a target where the texture's type doesn't match. - Reworked how cube map textures are handled, cube map texture support should now be a bit more robust. - The ARB program parser now respects driver limits when parsing ARB programs. - Increased the number of supported texture units from 4 to 8. - No longer skips array-based draws where the coord array isn't enabled. This is useful for program/shader-based rendering which pass vertex coords in a generic array. - New extensions advertised, depending on driver support: o GL_ARB_fragment_shader o GL_ARB_shader_objects o GL_ARB_shading_language_100 o GL_ARB_vertex_shader
r200.library: - Library version is now 53.3. - Added support for GL_TEXTURE_WRAP_R.
r300.library: - Library version is now 53.5. - Added support for cube maps. - Fixed ARB programs to work correctly regardless of which fixed function texture units are enabled. - Added support for reading the fragment window position in fragment programs. - Increased the number of supported texture units from 4 to 7. - Fixed the handling of killing/discarding a fragment in fragment programs. - Fixed the fragment program compiler to emulate unsupported instructions and source operand modifications. - Fixed to handle outputting colour values in fragment program stages other than the last stage.
Changes since MorphOS 3.17 -------------------------- tinygl.library: - Library version is now 53.7. - Cleaned up the OpenGL extensions advertised by TinyGL: o GL_EXT_texture_compression_s3tc was advertised with the wrong name, EXT_texture_compression_s3tc o The following non-existing extensions are no longer advertised: * GL_ARB_color_table * GL_ARB_compiled_vertex_array * GL_ARB_draw_range_elements * GL_EXT_color_table o The following extensions do exist, but are not supported, and thus no longer advertised: * GL_EXT_draw_range_elements o New driver-independent (or supported by all current drivers) extensions advertised: * GL_ARB_imaging * GL_ARB_texture_border_clamp * GL_ARB_texture_env_dot3 * GL_ARB_texture_mirrored_repeat * GL_ARB_texture_non_power_of_two * GL_ARB_transpose_matrix * GL_ARB_window_pos * GL_EXT_abgr * GL_EXT_blend_color * GL_EXT_blend_equation_separate * GL_EXT_blend_func_separate * GL_EXT_blend_minmax * GL_EXT_blend_subtract * GL_EXT_multi_draw_arrays * GL_EXT_secondary_color * GL_EXT_texture_env_dot3 * GL_SGI_color_table * New driver-dependent extensions advertised. Availability depends on the driver in use: * GL_ARB_fragment_program * GL_ARB_fragment_shader * GL_ARB_shader_objects * GL_ARB_shading_language_100 * GL_ARB_texture_cube_map * GL_ARB_vertex_program * GL_ARB_vertex_shader * GL_EXT_texture_cube_map - Every OpenGL 2.1 function now exists in the tinygl.library base. Note that this doesn't mean that TinyGL supports all of OpenGL 2.1's functionality yet, just that the functions exists. - Every OpenGL 2.1 enable/disable state is now recognised by tinygl.library, and can have their set value retrieved, although not all of them have their underlying functionality implemented. - Added support for cube mapping. (extensions: GL_ARB_texture_cube_map, GL_EXT_texture_cube_map) - Added support for OpenGL ARB programs. (extensions: GL_ARB_fragment_program, GL_ARB_vertex_program) - Added support for OpenGL shaders. - Added support for GL_COLOR_SUM. - Implemented the fixed function OpenGL vertex and fragment pipeline as dynamically generated shaders. This implementation is used on graphics cards that support shaders instead of the previous limited fixed function support in hardware/drivers. - Many OpenGL functions that previously only had some variants of otherwise supported functions available now support all variants. These are functions whose names typically end with a single digit (1, 2, 3 or 4) followed by 1 or two characters to indicate argument type (b, d, f, i, s, ub, ui, us) and then optionally a v, for example glColor3ub(). These functions are: o glColor#?() o glEvalCoord#?() o glMultiTexCoord#?() o glNormal#?() o glRasterPos#?() o glTexCoord#?() o glVertex#?() o glWindowPos#?() - Updated glGetDoublev, glGetFloatv and glGetIntegerv to fix bugs in numerous already supported tags, and added many previously unsupported tags. The following tags are newly supported: o GL_BLEND_COLOR o GL_BLEND_EQUATION_ALPHA o GL_BLEND_EQUATION_RGB o GL_COLOR_WRITEMASK o GL_CURRENT_RASTER_SECONDARY_COLOR o GL_CURRENT_SECONDARY_COLOR o GL_DEPTH_CLEAR_VALUE o GL_DITHER o GL_FOG_COLOR o GL_FOG_DENSITY o GL_FOG_END o GL_FOG_MODE o GL_FOG_START o GL_INDEX_MODE o GL_LIGHT_MODEL_COLOR_CONTROL o GL_LIST_BASE o GL_LIST_INDEX o GL_LIST_MODE o GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS o GL_MAX_TEXTURE_COORDS o GL_MAX_TEXTURE_IMAGE_UNITS o GL_MAX_VERTEX_ATTRIBS o GL_PROGRAM_ERROR_POSITION_ARB o GL_RGBA_MODE o GL_SECONDARY_COLOR_ARRAY_POINTER o GL_STENCIL_CLEAR_VALUE o GL_STENCIL_FAIL o GL_STENCIL_FUNC o GL_STENCIL_PASS_DEPTH_FAIL o GL_STENCIL_PASS_DEPTH_PASS o GL_STENCIL_REF o GL_STENCIL_TEST o GL_STENCIL_VALUE_MASK o GL_STENCIL_WRITEMASK o GL_TRANSPOSE_MODELVIEW_MATRIX o GL_TRANSPOSE_PROJECTION_MATRIX o GL_TRANSPOSE_TEXTURE_MATRIX - Added support for the following state getter functions: o glGetBooleanv() o glGetLightiv() o glGetMaterialiv() o glGetTexGendv() o glGetTexGenfv() o glGetTexGeniv() o glGetTexLevelParameterfv() - Added support for the following state setter functions: o glFogiv() o glLightiv() o glLightModeliv() o glMaterialiv() o glPointParameterf() o glPointParameterfv() o glPointParameteri() o glPointParameteriv() o glTexGeniv() o glTexGendv() - Added support for the following glGetLight#?() tags: o GL_CONSTANT_ATTENUATION o GL_LINEAR_ATTENUATION o GL_QUADRATIC_ATTENUATION o GL_SPECULAR o GL_SPOT_CUTOFF o GL_SPOT_DIRECTION o GL_SPOT_EXPONENT - Added support for glMultiDrawArrays() and glMultiDrawElements(). - Added support for glFinish(). - glGetError() is now implemented and will - for some functions - return standards compliant error codes. - Added glRectsv(). - Fixed some of the default states in freshly created TinyGL contexts to match what is required by OpenGL: o Normal value o Secondary colour o Raster colour o Raster secondary colour o Texture coordinates for texture units > 0 - glGetTexLevelParameter#?() now supports queries of the GL_TEXTURE_1D target. - Fixed glClientActiveTexture() to properly validate app input and report the required OpenGL errors. - Fixed glBindTexture() to disallow binding a texture to a target where the texture's type doesn't match. - Increased the number of supported texture units from 4 to 8. - No longer skips array-based draws where the coord array isn't enabled. This is useful for program/shader-based rendering which pass vertex coords in a generic array. - A function to obtain OpenGL function pointers at runtime, tglGetProcAddress(), has been added. - Fixed the default settings for vertex attrib arrays. - Fixed several bugs in the implementation of vertex buffer objects and made the implementation more complete. - Fixed several bugs related to using TinyGL to render directly to a window (as opposed to to a screen or a bitmap). - Fixed multiple issues with GL_RGB5_A1 textures. R200: - Library version is now 53.4. - Added support client programs directly supplying the secondary OpenGL colour. - Added support for cube maps. - Added support for GL_TEXTURE_WRAP_R. - Texture combiner support has been fixed to be be standards compliant: o Added/fixed the support for the GL_ADD, GL_ADD_SIGNED, GL_DOT3_RGB, GL_DOT3_RGBA, GL_INTERPOLATE and GL_SUBTRACT texture combiner functions. o Added support for texture combiner output scaling. o Any and every combination of GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_ALPHA and GL_ONE_MINUS_SRC_ALPHA operands now work.
R300, R400 and R500: - Library version is now 53.10. - Added support client programs directly supplying the secondary OpenGL colour. - Added support for cube maps. - Added support for GL_RGB5_A1 textures. - Increased the number of supported texture units from 4 to 7. - Texture combiner support has been fixed to be be standards compliant: o Added/fixed the support for the GL_ADD, GL_ADD_SIGNED, GL_DOT3_RGB, GL_DOT3_RGBA, GL_INTERPOLATE and GL_SUBTRACT texture combiner functions. o Added support for texture combiner output scaling. o Any and every combination of GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_ALPHA and GL_ONE_MINUS_SRC_ALPHA operands now work. - Added support for OpenGL ARB programs. - Added support for OpenGL shaders. - Fixed user clip planes (ie, glClipPlane()) for clip planes other than clip plane 0.
R500: - Fixed a bug that would cause wrong rendering if an application had gaps in its enabled texture units, for example if only texture units 0 and 2 were enabled. - Fixed a problem that in certain situations could cause R500-based Radeons to misrender when _not_ using fragment shaders/programs.
freeglut.library: - New port of FreeGLUT version 3.4.0 to MorphOS. This supercedes TinyGL's built-in GLUT support, is a lot more feature complete and makes it easier to port GLUT OpenGL examples to MorphOS.
OpenGL test suite: - Added texture combiner tests to my OpenGL test suite. All drivers and hardware combinations now pass all tests.
SDK: - Please note that any software compiled with the updated SDK will require tinygl.library version 53.0 or higher, and thus either MorphOS 3.18 or MorphOS 3.17 + this separate TinyGL update. If you manually open tinygl.library, you _must_ update your code to request version 53! - TinyGL's automatic libopen function now requires at least version 53 of tinygl.library. - TinyGL's link library now comes in both regular and baserel flavours. - Newly supported OpenGL extensions that introduce new functions to OpenGL are disabled by default. To enable the new extensions, call tglEnableNewExtensions(0). The passed argument _must_ be zero. If you call tglEnableNewExtensions(), then you _must_ use tglGetProcAddress() to obtain pointers to OpenGL functions present in OpenGL extensions. You _must not_ use a custom function for this purpose. - Includes have been reworked a bit to be more MorphOS-like. clib/tinygl_protos.h is now a proper clib include that contains just the prototypes of tinygl.library's public functions. - the includes now define GL_VERSION_x_y, with x and y corresponding to the OpenGL versions supported by the includes. - For each OpenGL extension supported, the includes now define a preprocessor macro with the same name as the OpenGL extension, e.g. GL_ARB_vertex_buffer_object. - Includes have been updated to fully support OpenGL 2.1, plus the following extensions: o GL_ARB_color_buffer_float o GL_ARB_depth_texture o GL_ARB_draw_buffers o GL_ARB_fragment_program o GL_ARB_fragment_program_shadow o GL_ARB_fragment_shader o GL_ARB_framebuffer_object o GL_ARB_half_float_pixel o GL_ARB_imaging o GL_ARB_matrix_palette o GL_ARB_multisample o GL_ARB_multitexture o GL_ARB_occlusion_query o GL_ARB_pixel_buffer_object o GL_ARB_point_parameters o GL_ARB_point_sprite o GL_ARB_shader_objects o GL_ARB_shading_language_100 o GL_ARB_shadow o GL_ARB_shadow_ambient o GL_ARB_texture_border_clamp o GL_ARB_texture_compression o GL_ARB_texture_cube_map o GL_ARB_texture_env_add o GL_ARB_texture_env_combine o GL_ARB_texture_env_crossbar o GL_ARB_texture_env_dot3 o GL_ARB_texture_float o GL_ARB_texture_mirrored_repeat o GL_ARB_texture_non_power_of_two o GL_ARB_texture_rectangle o GL_ARB_transpose_matrix o GL_ARB_vertex_blend o GL_ARB_vertex_buffer_object o GL_ARB_vertex_program o GL_ARB_vertex_shader o GL_ARB_window_pos o GL_ATI_fragment_shader o GL_ATI_separate_stencil o GL_EXT_abgr o GL_EXT_bgra o GL_EXT_blend_color o GL_EXT_blend_equation_separate o GL_EXT_blend_func_separate o GL_EXT_blend_logic_op o GL_EXT_blend_minmax o GL_EXT_blend_subtract o GL_EXT_color_subtable o GL_EXT_color_table o GL_EXT_compiled_vertex_array o GL_EXT_convolution o GL_EXT_draw_range_elements o GL_EXT_fog_coord o GL_EXT_histogram o GL_EXT_multi_draw_arrays o GL_EXT_packed_pixels o GL_EXT_paletted_texture o GL_EXT_point_parameters o GL_EXT_rescale_normal o GL_EXT_secondary_color o GL_EXT_separate_specular_color o GL_EXT_shadow_funcs o GL_EXT_shared_texture_palette o GL_EXT_stencil_two_side o GL_EXT_stencil_wrap o GL_EXT_texture3D o GL_EXT_texture_compression_s3tc o GL_EXT_texture_cube_map o GL_EXT_texture_env_add o GL_EXT_texture_env_combine o GL_EXT_texture_env_dot3 o GL_EXT_texture_filter_anisotropic o GL_EXT_texture_lod o GL_EXT_texture_lod_bias o GL_EXT_texture_sRGB o GL_HP_convolution_border_modes o GL_NV_blend_square o GL_NV_texgen_reflection o GL_S3_s3tc o GL_SGIS_generate_mipmap o GL_SGIS_multitexture o GL_SGIS_texture_edge_clamp o GL_SGIS_texture_lod o GL_SGI_color_matrix o GL_SGI_color_table o GL_SUN_multi_draw_arrays - Contains includes and link library for freeglut.library.
Radeon models in Macs --------------------- Below is a list of Mac models support by MorphOS with builtin graphics. You can find your system's identifier by opening up "System Monitor" in the "Utilities" menu of Ambient and then clicking on "System Details" tab. The name listed after "Machine:" is your system identifier. Use it to find your corresponding entry in the table below. An asterisk ("*") in the identifier in the table below means that it matches with any number in that position.
Model | Identifier | Radeon family -----------------------+--------------+-------------- iBook G4 (2003) | PowerBook6,3 | R200 family iBook G4 (2004) | PowerBook6,5 | R200 family iBook G4 (2005) | PowerBook6,7 | R300 family iMac G5 (iSight) | PowerMac12,1 | R300 family Mac Mini G4 | PowerMac10,* | R200 family PowerBook G4 Titanium | PowerBook3,3 | R100 family PowerBook G4 Titanium | PowerBook3,5 | R200 family PowerBook G4 Aluminium | PowerBook5,* | R300 family
Discrete Radeon models (R200-R500) ---------------------------------- Below is a list of discrete Radeon models that are supported by this TinyGL update. Find the row with the model name of your Radeon graphics card in the first column. The second column will show which Radeon family this graphics card belongs to.
Radeon model | Radeon family -------------------+-------------- Radeon 8500 | R200 family Radeon 8500 LE | R200 family Radeon 9000 | R200 family Radeon 9000 Pro | R200 family Radeon 9100 | R200 family Radeon 9200 | R200 family Radeon 9200 SE | R200 family Radeon 9250 | R200 family Radeon 9250 SE | R200 family Radeon 9500 | R300 family Radeon 9500 Pro | R300 family Radeon 9550 | R300 family Radeon 9550 SE | R300 family Radeon 9600 | R300 family Radeon 9600 Pro | R300 family Radeon 9600 SE | R300 family Radeon 9600 XT | R300 family Radeon 9600 TX | R300 family Radeon 9700 | R300 family Radeon 9700 Pro | R300 family Radeon 9700 TX | R300 family Radeon 9800 | R300 family Radeon 9800 Pro | R300 family Radeon 9800 SE | R300 family Radeon 9800 XL | R300 family Radeon 9800 XXL | R300 family Radeon 9800 XT | R300 family Radeon HD 2350 | R600 family Radeon HD 2400 Pro | R600 family Radeon HD 2400 XT | R600 family Radeon HD 2600 Pro | R600 family Radeon HD 2600 XT | R600 family Radeon HD 2900 GT | R600 family Radeon HD 2900 Pro | R600 family Radeon HD 2900 XT | R600 family Radeon HD 3410 | R600 family Radeon HD 3450 | R600 family Radeon HD 3470 | R600 family Radeon HD 3550 | R600 family Radeon HD 3570 | R600 family Radeon HD 3610 | R600 family Radeon HD 3650 | R600 family Radeon HD 3730 | R600 family Radeon HD 3750 | R600 family Radeon HD 3830 | R600 family Radeon HD 3850 | R600 family Radeon HD 3850 X2 | R600 family Radeon HD 3870 | R600 family Radeon HD 3870 X2 | R600 family Radeon HD 4350 | R700 family Radeon HD 4550 | R700 family Radeon HD 4570 | R700 family Radeon HD 4580 | R600 family Radeon HD 4650 | R700 family Radeon HD 4670 | R700 family Radeon HD 4730 | R700 family Radeon HD 4750 | R700 family Radeon HD 4770 | R700 family Radeon HD 4810 | R700 family Radeon HD 4830 | R700 family Radeon HD 4850 | R700 family Radeon HD 4850 X2 | R700 family Radeon HD 4860 | R700 family Radeon HD 4870 | R700 family Radeon HD 4870 X2 | R700 family Radeon HD 4890 | R700 family Radeon HD 5450 | Evergreen family Radeon HD 5550 | Evergreen family Radeon HD 5570 | Evergreen family Radeon HD 5610 | Evergreen family Radeon HD 5670 | Evergreen family Radeon HD 5750 | Evergreen family Radeon HD 5770 | Evergreen family Radeon HD 5830 | Evergreen family Radeon HD 5850 | Evergreen family Radeon HD 5870 | Evergreen family Radeon HD 5970 | Evergreen family Radeon HD 6350 | Evergreen family Radeon HD 6450 | Northern Islands family Radeon HD 6570 | Northern Islands family Radeon HD 6670 | Northern Islands family Radeon HD 6750 | Evergreen family Radeon HD 6770 | Evergreen family Radeon HD 6790 | Northern Islands family Radeon HD 6850 | Northern Islands family Radeon HD 6870 | Northern Islands family Radeon HD 6930 | Cayman Radeon HD 6950 | Cayman Radeon HD 6970 | Cayman Radeon HD 6990 | Cayman Radeon HD 7350 | Evergreen family Radeon HD 7450 | Northern Islands family Radeon HD 7470 | Northern Islands family Radeon HD 7510 | Northern Islands family Radeon HD 7570 | Northern Islands family Radeon HD 7670 | Northern Islands family Radeon HD 7730 | GCN 1 family Radeon HD 7750 | GCN 1 family Radeon HD 7770 | GCN 1 family Radeon HD 7790 | GCN 2 family Radeon HD 7850 | GCN 1 family Radeon HD 7870 | GCN 1 family Radeon HD 7870 XT | GCN 1 family Radeon HD 7950 | GCN 1 family Radeon HD 7970 | GCN 1 family Radeon HD 7990 | GCN 1 family Radeon HD 8350 | Evergreen family Radeon HD 8450 | Northern Islands family Radeon HD 8470 | Northern Islands family Radeon HD 8490 | Northern Islands family Radeon HD 8570 | GCN 1 family Radeon HD 8670 | GCN 1 family Radeon HD 8730 | GCN 1 family Radeon HD 8760 | GCN 1 family Radeon HD 8770 | GCN 2 family Radeon HD 8870 | GCN 1 family Radeon HD 8950 | GCN 1 family Radeon HD 8970 | GCN 1 family Radeon HD 8990 | GCN 1 family Radeon R5 220 | Northern Islands family Radeon R5 230 | Northern Islands family Radeon R5 235 | Northern Islands family Radeon R5 235X | Northern Islands family Radeon R5 240 | GCN 1 family Radeon R7 240 | GCN 1 family Radeon R7 250 | GCN 1 family Radeon R7 250E | GCN 1 family Radeon R7 250X | GCN 1 family Radeon R7 260 | GCN 2 family Radeon R7 260X | GCN 2 family Radeon R7 265 | GCN 1 family Radeon R9 270 | GCN 1 family Radeon R9 270X | GCN 1 family Radeon R9 280 | GCN 1 family Radeon R9 280X | GCN 1 family Radeon R9 285 | GCN 3 family Radeon R9 285X | GCN 3 family Radeon R9 290 | GCN 2 family Radeon R9 290X | GCN 2 family Radeon R9 295X2 | GCN 2 family Radeon X300 | R300 family Radeon X300 LE | R300 family Radeon X300 SE | R300 family Radeon X550 | R300 family Radeon X600 SE | R300 family Radeon X600 | R300 family Radeon X600 Pro | R300 family Radeon X600 XT | R300 family Radeon X700 | R400 family Radeon X700 Pro | R400 family Radeon X800 | R400 family Radeon X800 GT | R400 family Radeon X800 GTO | R400 family Radeon X800 Pro | R400 family Radeon X800 SE | R400 family Radeon X800 XL | R400 family Radeon X800 XT | R400 family Radeon X800 XT PE | R400 family Radeon X850 Pro | R400 family Radeon X850 XT | R400 family Radeon X850 XT PE | R400 family Radeon X550 XT | R400 family Radeon X550 XTX | R400 family Radeon X700 LE | R400 family Radeon X700 SE | R400 family Radeon X700 | R400 family Radeon X700 Pro | R400 family Radeon X700 XT | R400 family Radeon X740 XL | R400 family Radeon X800 | R400 family Radeon X800 GT | R400 family Radeon X800 GTO | R400 family Radeon X800 Pro | R400 family Radeon X800 XL | R400 family Radeon X800 XT | R400 family Radeon X850 Pro | R400 family Radeon X850 XT | R400 family Radeon X1050 | R300/R400 family (this Radeon model name has been used for both R300 and R400 based graphics card) Radeon X1300 | R500 family Radeon X1300 PRO | R500 family Radeon X1300 XT | R500 family Radeon X1550 | R500 family Radeon X1600 PRO | R500 family Radeon X1600 XT | R500 family Radeon X1650 | R500 family Radeon X1650 SE | R500 family Radeon X1650 GT | R500 family Radeon X1650 PRO | R500 family Radeon X1650 XT | R500 family Radeon X1700 FSC | R500 family Radeon X1700 SE | R500 family Radeon X1800 | R500 family Radeon X1800 GTO | R500 family Radeon X1800 XL | R500 family Radeon X1800 XT | R500 family Radeon X1900 | R500 family Radeon X1900 GT | R500 family Radeon X1900 XT | R500 family Radeon X1900 XTX | R500 family Radeon X1950 | R500 family Radeon X1950 GT | R500 family Radeon X1950 PRO | R500 family Radeon X1950 XT | R500 family Radeon X1950 XTX | R500 family
|