| Name |
| |
| AMD_name_gen_delete |
| |
| |
| Name Strings |
| |
| GL_AMD_name_gen_delete |
| |
| |
| Contributors |
| |
| Balaji Calidas |
| Mark Young |
| Murat Balci |
| Benedikt Kessler |
| |
| Contact |
| |
| Mark Young (mark.young 'at' amd.com) |
| |
| |
| Status |
| |
| In Progress. |
| |
| |
| Version |
| |
| Last Modified Date: February 10, 2010 |
| Author Revision: 1 |
| |
| |
| Number |
| |
| 394 |
| |
| |
| Dependencies |
| |
| OpenGL 2.1 is required. |
| |
| ARB_framebuffer_object affects this spec. |
| |
| ARB_vertex_array_object affects this spec. |
| |
| EXT_transform_feedback affects this spec. |
| |
| EXT_transform_feedback2 affects this spec. |
| |
| AMD_performance_monitor affects this spec |
| |
| ARB_sampler_objects affects this spec |
| |
| |
| Overview |
| |
| This extension simply creates 2 new entry-points that name generic |
| creation and deletion of names. The intent is to go away from API |
| functionality that provides a create/delete function for each specific |
| object. |
| |
| For example: |
| glGenTextures/glDeleteTextures/glIsTexture |
| glGenBuffers/glDeleteBuffers/IsBuffer |
| glGenFramebuffers/glDeleteFramebuffers/IsFramebuffer |
| |
| Instead, everything is created using one entry-point GenNamesAMD and |
| everything is now deleted with another entry-point DeleteNamesAMD with |
| the appropriate identifier set. In addition, everything can now be |
| queried with IsNameAMD. |
| |
| This alleviates the problem we may eventually encounter where we have |
| many Gen/Delete/Is functions where 3 might suffice. All that is needed |
| in the new case is to add a valid identifier to the accepted parameters |
| list. |
| |
| |
| IP Status |
| |
| No known IP claims. |
| |
| |
| New Procedures and Functions |
| |
| void GenNamesAMD(enum identifier, uint num, uint *names); |
| |
| void DeleteNamesAMD(enum identifier, uint num, const uint *names); |
| |
| boolean IsNameAMD(enum identifier, uint name); |
| |
| New Types |
| |
| None. |
| |
| |
| New Tokens |
| |
| Accepted as the <identifier> parameter of GenNamesAMD and DeleteNamesAMD: |
| |
| DATA_BUFFER_AMD 0x9151 |
| PERFORMANCE_MONITOR_AMD 0x9152 |
| QUERY_OBJECT_AMD 0x9153 |
| VERTEX_ARRAY_OBJECT_AMD 0x9154 |
| SAMPLER_OBJECT_AMD 0x9155 |
| |
| |
| Additions to Chapter 2 of the OpenGL 2.1 Specification (OpenGL Operation) |
| |
| Insert a new section before section 2.9 "Buffer Objects" titled |
| "Object Name Handling" |
| ---------------------------------------------------------------- |
| |
| 2.x Object Name Handling |
| |
| 2.x.1 Name Generation |
| |
| Objects in OpenGL are created, modified, and deleted using names. These |
| names are unique per object type, but can be common across multiple types. |
| For example, a texture and a query object may both be named 127, but two |
| query different query objects cannot have the name 127 in the same context. |
| These names are generated using each types own specific GenXXX command, but |
| can also be created using the more generic command |
| |
| void GenNamesAMD( enum identifier, sizei n, uint *names ); |
| |
| where <identifier> indicates the type of object that is to be created, <n> |
| is used to indicate how many objects to create, and <names> is a previously |
| allocated array that the new generated names will be supplied in. These |
| names for marked as used for the purposes of the type of object specified by |
| <identifier> (and their own individual GenXXX command), but they do not |
| typically acquire any state until they are first bound, just as if they were |
| unused. |
| |
| Valid values for <identifier> currently are: |
| - DATA_BUFFER_AMD (For ARRAY_BUFFER, ELEMENT_ARRAY_BUFFER, |
| PIXEL_PACK_BUFFER, and PIXEL_UNPACK_BUFFER) |
| - FRAMEBUFFER |
| - RENDERBUFFER |
| - TEXTURE |
| - TRANSFORM_FEEDBACK_EXT |
| - VERTEX_ARRAY_OBJECT_AMD (For VAOs instead of VERTEX_ARRAY_BINDING) |
| - QUERY_OBJECT_AMD (For query objects) |
| - PERFORMANCE_MONITOR_AMD (For a performance monitor object) |
| - SAMPLER_OBJECT_AMD (For a sampler object) |
| |
| If <identifier> is not one of these valid values, the error INVALID_ENUM |
| will be triggered. If <n> is a number zero or <names> is NULL, the error |
| INVALID_VALUE is triggered. |
| |
| |
| 2.x.2 Name Deletion |
| |
| Object names can be deleted when they are no longer needed using the command |
| |
| void DeleteNamesAMD( enum identifier, sizei n, const uint *names ); |
| |
| where <identifier> indicates one of the above valid types, and <n> indicates |
| how many object names are provided in the <names> array. Similar to |
| GenNamesAMD, each object type also has its own DeleteXXX command. |
| DeleteNamesAMD with a given object type behaves in the same way that the |
| object types specific DeleteXXX command does. |
| |
| If <identifier> is not one of these valid values, the error INVALID_ENUM |
| will be triggered. If <n> is a number zero or <names> is NULL, the error |
| INVALID_VALUE is triggered. |
| |
| |
| 2.x.3 Name Querying |
| |
| Object names can be queried to make sure that an object of the given type |
| exists using the command |
| |
| boolean IsNameAMD( enum identifier, uint name ); |
| |
| where <identifier> indicates one of the above valid types, and <name> |
| is the name that is being identified as a valid name for that object |
| type. Similar to GenNamesAMD and DeleteNamesAMD, each object type also |
| has its own IsXXX command. IsNameAMD with a given object type behaves in |
| the same way that the object types specific IsXXX command does. |
| |
| If <identifier> is not one of these valid values, the error INVALID_ENUM |
| will be triggered. |
| |
| |
| 2.x.4 Name Binding |
| |
| Objects are typically enabled for usage through a Bind call or something |
| similar. The process for binding objects for usage is handled differently |
| per object type. For further information on how to use each object, refer |
| to its section later in this spec. |
| |
| |
| |
| Modify section 2.9 "Buffer Objects", page 33. |
| ---------------------------------------------------------------- |
| |
| |
| After the paragraphs talking about 'DeleteBuffers' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void DeleteNamesAMD( enum identifier, sizei n, const uint *names ); |
| |
| with <identifier> set to DATA_BUFFER_AMD behaves the same as using the |
| DeleteBuffers command. |
| |
| |
| Modify the paragraphs talking about 'GenBuffers': |
| ---------------------------------------------------------------- |
| |
| The commands |
| |
| void GenBuffers( sizei n, uint *buffers ); |
| |
| returns <n> previously unused buffer object names in <buffers>. These names |
| are marked as used, for the purposes of GenBuffers and GenNamesAMD when used |
| with <identifier> set to DATA_BUFFER_AMD only, but they acquire buffer state |
| only when they are first bound, just as if they were unused. |
| |
| Calling the command |
| |
| void GenNamesAMD( enum identifier, sizei n, uint *names ); |
| |
| with <identifier> set to DATA_BUFFER_AMD behaves the same as using the |
| GenBuffers command. |
| |
| While a buffer object is bound, any GL operations on that object affect any |
| other bindings of that object. If a buffer object is deleted while it is |
| bound, all bindings to that object in the current context (i.e. in the |
| thread that called DeleteBuffers or DeleteNamesAMD with <identifier> set to |
| DATA_BUFFER_AMD) are reset to zero. Bindings to that buffer in other |
| contexts and other threads are not affected, but attempting to use a deleted |
| buffer in another thread... |
| |
| |
| |
| Modify the new section 2.y "Vertex Array Objects". |
| Added by ARB_vertex_array_object |
| ---------------------------------------------------------------- |
| |
| Modify the paragraphs talking about 'GenVertexArrays': |
| ---------------------------------------------------------------- |
| |
| The commands |
| |
| void GenVertexArrays( sizei n, uint *arrays ); |
| |
| returns <n> previous unused vertex array object names in <arrays>. These |
| names are marked as used, for the purposes of GenVertexArrays and |
| GenNamesAMD (when <identifier> is set to VERTEX_ARRAY_OBJECT_AMD) only, |
| and are initialized with the state listed in tables 6.6 (except for |
| the CLIENT_ACTIVE_TEXTURE selector state), 6.7 and 6.8. |
| |
| Calling the command |
| |
| void GenNamesAMD( enum identifier, sizei n, uint *names ); |
| |
| with <identifier> set to VERTEX_ARRAY_OBJECT_AMD behaves the same as using |
| the GenVertexArrays command. |
| |
| |
| After the paragraphs talking about 'DeleteVertexArrays' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void DeleteNamesAMD( enum identifier, sizei n, const uint *names ); |
| |
| with <identifier> set to VERTEX_ARRAY_OBJECT_AMD behaves the same as using |
| the DeleteVertexArrays command. |
| |
| |
| Modify the paragraph that starts with |
| 'BindVertexArray fails and an INVALID_OPERATION error'... to: |
| ---------------------------------------------------------------- |
| BindVertexArray fails and an INVALID_OPERATION error is generated if |
| array is not a name returned from a previous call to |
| GenVertexArrays (or GenNamesAMD with <identifier> set to |
| VERTEX_ARRAY_OBJECT), or if such a name has since been deleted with |
| either DeleteVertexArrays or DeleteNamesAMD (with <identifier> set to |
| VERTEX_ARRAY_OBJECT). An INVALID_OPERATION error is generated |
| if VertexAttribPointer or VertexAttribIPointer is called while a |
| non-zero vertex array object is bound and zero is bound to the |
| ARRAY_BUFFER buffer object binding point[fn]. |
| |
| |
| |
| Modify the new section 2.z.1 "Transform Feedback Objects" |
| Added by EXT_transform_feedback2 |
| ---------------------------------------------------------------- |
| |
| Add after the paragraphs talking about 'DeleteTransformFeedbacksEXT': |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void DeleteNamesAMD( enum identifier, sizei n, const uint *names ); |
| |
| with <identifier> set to TRANSFORM_FEEDBACK_EXT behaves the same as using |
| the DeleteTransformFeedbacksEXT command. |
| |
| |
| Modify the paragraphs talking about 'GenTransformFeedbacksEXT': |
| ---------------------------------------------------------------- |
| |
| The command |
| |
| void GenTransformFeedbacksEXT(sizei n, uint *ids) |
| |
| returns <n> previously unused transform feedback object names in <ids>. |
| These names are marked as used, for the purposes of |
| GenTransformFeedbacksEXT and GenNamesAMD (when <identifier> is set to |
| TRANSFORM_FEEDBACK_EXT) only, but they acquire transform feedback state |
| only when they are first bound, just as if they were unused. |
| |
| Calling the command |
| |
| void GenNamesAMD( enum identifier, sizei n, uint *names ); |
| |
| with <identifier> set to TRANSFORM_FEEDBACK_EXT behaves the same as using |
| the GenTransformFeedbacksEXT command. |
| |
| |
| Modify the paragraph that starts with |
| 'BindVertexArray fails and an INVALID_OPERATION error'... to: |
| ---------------------------------------------------------------- |
| BindVertexArray fails and an INVALID_OPERATION error is generated if |
| array is not a name returned from a previous call to |
| GenVertexArrays (or GenNamesAMD with <identifier> set to |
| VERTEX_ARRAY_OBJECT), or if such a name has since been deleted with |
| either DeleteVertexArrays or DeleteNamesAMD (with <identifier> set to |
| VERTEX_ARRAY_OBJECT). An INVALID_OPERATION error is generated |
| if VertexAttribPointer or VertexAttribIPointer is called while a |
| non-zero vertex array object is bound and zero is bound to the |
| ARRAY_BUFFER buffer object binding point[fn]. |
| |
| |
| |
| Additions to Chapter 3 of the OpenGL 2.1 Specification (Rasterization) |
| |
| Modify section 3.8.12 "Texture Objects", page 182. |
| ---------------------------------------------------------------- |
| |
| After the paragraphs talking about 'DeleteTextures' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void DeleteNamesAMD( enum identifier, sizei n, const uint *names ); |
| |
| with <identifier> set to TEXTURE behaves the same as using the |
| DeleteTextures command. |
| |
| |
| Modify the paragraphs talking about 'GenTextures': |
| ---------------------------------------------------------------- |
| |
| The commands |
| |
| void GenTextures( sizei n, uint *textures ); |
| |
| returns <n> previously unused texture object names in <textures>. These names |
| are marked as used, for the purposes of GenTextures and GenNamesAMD when used |
| with <identifier> set to TEXTURE only, but they acquire texture state and |
| dimensionality only when they are first bound, just as if they were unused. |
| |
| Calling the command |
| |
| void GenNamesAMD( enum identifier, sizei n, uint *names ); |
| |
| with <identifier> set to TEXTURE behaves the same as using the |
| GenBuffers command. |
| |
| |
| |
| Modify section 3.9.2 "Sampler Objects". |
| ---------------------------------------------------------------- |
| |
| After the paragraphs talking about 'GenSamplers' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void GenNamesAMD( enum identifier, sizei n, uint *names ); |
| |
| with <identifier> set to SAMPLER_OBJECT_AMD behaves the same as using the |
| GenSamplers command. |
| |
| After the paragraphs talking about 'DeleteSamplers' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void DeleteNamesAMD( enum identifier, sizei n, const uint *names ); |
| |
| with <identifier> set to SAMPLER_OBJECT_AMD behaves the same as using the |
| DeleteSamplers command. |
| |
| |
| |
| Additions to Chapter 4 of the OpenGL 2.1 Specification (Per-Fragment Operations |
| and the Framebuffer) |
| |
| Modify section 4.1.7 "Occlusion Queries", page 207. |
| ---------------------------------------------------------------- |
| |
| Insert after the paragraph talking about 'GenQueries': |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void GenNamesAMD( enum identifier, sizei n, uint *names ); |
| |
| with <identifier> set to QUERY_OBJECT_AMD behaves the same as using the |
| GenQueries command. |
| |
| |
| After the paragraphs talking about 'DeleteQueries' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void DeleteNamesAMD( enum identifier, sizei n, const uint *names ); |
| |
| with <identifier> set to QUERY_OBJECT_AMD behaves the same as using the |
| DeleteTextures command. |
| |
| |
| Modify the paragraph that talks about GenQueries and DeleteQueries errors |
| after that: |
| ---------------------------------------------------------------- |
| |
| Calling either GenQueries, DeleteQueries, GenNamesAMD(QUERY_OBJECT_AMD), |
| or DeleteNamesAMD(QUERY_OBJECT_AMD), while any query of any target is |
| active causes an INVALID OPERATION error to be generated. |
| |
| |
| Modify section 4.4.1 "Binding and Managing Framebuffer Objects" |
| ---------------------------------------------------------------- |
| |
| |
| Modify the 2nd paragraph to read: |
| ---------------------------------------------------------------- |
| |
| A framebuffer object is created by binding a name returned by |
| GenFramebuffers or GenNamesAMD (see below) to DRAW_FRAMEBUFFER or |
| READ_FRAMEBUFFER. The binding is effected by calling |
| |
| |
| Modify the 5th paragraph to read: |
| ---------------------------------------------------------------- |
| |
| BindFramebuffer fails and an INVALID_OPERATION error is generated if |
| <framebuffer> is not zero or a name returned from a previous call to |
| GenFramebuffers or GenNamesAMD, or if such a name has since been |
| deleted with DeleteFramebuffers or DeleteNamesAMD. |
| |
| |
| After the paragraphs talking about 'DeleteFramebuffers' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void DeleteNamesAMD( enum identifier, sizei n, const uint *names ); |
| |
| with <identifier> set to FRAMEBUFFER behaves the same as using the |
| DeleteFramebuffers command. |
| |
| |
| After the paragraphs talking about 'GenFramebuffers' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void GenNamesAMD( enum identifier, sizei n, uint *names ); |
| |
| with <identifier> set to FRAMEBUFFER behaves the same as using the |
| GenFramebuffers command. |
| |
| |
| Modify section 4.4.2.1 "Renderbuffer Objects" |
| ---------------------------------------------------------------- |
| |
| Modify the 2nd paragraph to read: |
| ---------------------------------------------------------------- |
| |
| The name space for renderbuffer objects is the unsigned integers, |
| with zero reserved for the GL. A renderbuffer object is created by |
| binding a name returned by GenRenderbuffers or GenNamesAMD (see below) |
| to RENDERBUFFER. The binding is effected by calling |
| |
| Modify the 9th paragraph to read: |
| ---------------------------------------------------------------- |
| |
| BindRenderbuffer fails and an INVALID_OPERATION error is generated |
| if <renderbuffer> is not a name returned from a previous call to |
| GenRenderbuffers or GenNamesAMD, or if such a name has since been |
| deleted with DeleteRenderbuffers or DeleteNamesAMD. |
| |
| |
| After the paragraphs talking about 'DeleteRenderbuffers' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void DeleteNamesAMD( enum identifier, sizei n, const uint *names ); |
| |
| with <identifier> set to RENDERBUFFER behaves the same as using the |
| DeleteFramebuffers command. |
| |
| |
| After the paragraphs talking about 'GenRenderbuffers' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void GenNamesAMD( enum identifier, sizei n, uint *names ); |
| |
| with <identifier> set to RENDERBUFFER behaves the same as using the |
| GenFramebuffers command. |
| |
| |
| Additions to Chapter 5 of the OpenGL 2.1 Specification (Special |
| Functions) |
| |
| Modify section 5.4 "Display Lists", page 240. |
| ---------------------------------------------------------------- |
| |
| Add the following to the list of things not allowed inside of a |
| display list: |
| ---------------------------------------------------------------- |
| |
| Name generation: GenNamesAMD and DeleteNamesAMD |
| |
| |
| Additions to Chapter 6 of the OpenGL 2.1 Specification (State and |
| State Requests) |
| |
| Modify section 6.1.4 "Texture Queries" |
| ---------------------------------------------------------------- |
| |
| After the paragraphs talking about 'IsTexture' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void IsNameAMD( enum identifier, uint name ); |
| |
| with <identifier> set to TEXTURE behaves the same as using the |
| IsTexture command. |
| |
| |
| Modify section 6.1.12 "Occlusion Queries" |
| ---------------------------------------------------------------- |
| |
| After the paragraphs talking about 'IsQuery' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void IsNameAMD( enum identifier, uint name ); |
| |
| with <identifier> set to QUERY_OBJECT_AMD behaves differently from |
| calling IsQuery. IsQuery only returns if an object is a |
| query once it has been used. However, IsName returns TRUE if |
| a QUERY_OBJECT_AMD object had been created either through |
| GenQueries or GenNamesAMD. |
| |
| |
| Modify section 6.1.13 "Buffer Object Queries" |
| ---------------------------------------------------------------- |
| |
| After the paragraphs talking about 'IsBuffer' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void IsNameAMD( enum identifier, uint name ); |
| |
| with <identifier> set to DATA_BUFFER_AMD behaves the same as using the |
| IsBuffer command. |
| |
| |
| Additions to new section for Performance Monitoring (added by |
| AMD_performance_monitor) |
| |
| |
| After the paragraphs talking about 'GenPerfMonitorsAMD' insert: |
| ---------------------------------------------------------------- |
| |
| Calling the command |
| |
| void GenNamesAMD( enum identifier, sizei n, uint *names ); |
| |
| with <identifier> set to PERFORMANCE_MONITOR_AMD behaves the same as |
| using the GenPerfMonitorsAMD command. |
| |
| |
| Modify the paragraphs talking about 'DeletePerfMonitorsAMD' to: |
| ---------------------------------------------------------------- |
| |
| The command |
| |
| void DeletePerfMonitorsAMD(sizei n, uint *monitors) |
| |
| is used to delete the list of monitors created by a previous call to |
| GenPerfMonitors or GenNamesAMD (with <identifier> set to |
| PERFORMANCE_MONITOR_AMD). If a monitor ID in the list <monitors> does not |
| reference a previously generated performance monitor, an INVALID_VALUE |
| error is generated. |
| |
| Calling the command |
| |
| void DeleteNamesAMD( enum identifier, sizei n, const uint *names ); |
| |
| with <identifier> set to PERFORMANCE_MONITOR_AMD behaves the same as using |
| the DeletePerfMonitors command. |
| |
| |
| Modify the paragraph after the protoype for SelectPerfMonitorCountersAMD |
| to read: |
| ---------------------------------------------------------------- |
| |
| is used to enable or disable a list of counters from a group to be monitored |
| as identified by <monitor>. The <enable> argument determines whether the |
| counters should be enabled or disabled. <group> specifies the group |
| ID under which counters will be enabled or disabled. The <numCounters> |
| argument gives the number of counters to be selected from the list |
| <counterList>. If <monitor> is not a valid monitor created by either |
| GenPerfMonitorsAMD or GneNamesAMD (with <identifier> set to |
| PERFORMANCE_MONITOR_AMD), then INVALID_VALUE error will be generated. If |
| <group> is not a valid group, the INVALID_VALUE error will be generated. If |
| <numCounters> is less than 0, an INVALID_VALUE error will be generated. |
| |
| |
| Additions to the OpenGL / GLX / GLX Protocol Specifications |
| |
| None. |
| |
| |
| Additions to the WGL Specification |
| |
| None. |
| |
| |
| Errors |
| |
| The error INVALID_ENUM is generated by GenNamesAMD, DeleteNamesAMD, or |
| IsNameAMD if <identifier> is not one of: |
| - DATA_BUFFER_AMD (For ARRAY_BUFFER, ELEMENT_ARRAY_BUFFER, |
| PIXEL_PACK_BUFFER, and PIXEL_UNPACK_BUFFER) |
| - FRAMEBUFFER |
| - RENDERBUFFER |
| - TEXTURE |
| - TRANSFORM_FEEDBACK_EXT |
| - VERTEX_ARRAY_OBJECT_AMD (For VAOs instead of VERTEX_ARRAY_BINDING) |
| - QUERY_OBJECT_AMD (For query objects) |
| - PERFORMANCE_MONITOR_AMD (For a performance monitor object) |
| - SAMPLER_OBJECT_AMD (For a sampler object) |
| |
| The error INVALID_VALUE is generated by GenNamesAMD or DeleteNamesAMD |
| if <num> is 0. |
| |
| The error INVALID_VALUE is generated by GenNamesAMD or DeleteNamesAMD |
| if <names> is NULL. |
| |
| |
| New State |
| |
| None |
| |
| |
| New Implementation Dependent State |
| |
| If ARB_vertex_array_object is not present, remove any reference to |
| VERTEX_ARRAY or VERTEX_ARRAY_BINDING and VAOs. |
| |
| |
| Sample Code |
| |
| glGenTextures/glDeleteTextures |
| |
| Before: |
| |
| GLuint texID[12]; |
| glGenTextures(12, &texID[0]); |
| ... |
| // Use textures |
| ... |
| glDeleteTextures(12, &texID[0]); |
| |
| After: |
| |
| GLuint texID[12]; |
| glGenNames(GL_TEXTURE, 12, &texID[0]); |
| ... |
| // Use textures |
| ... |
| glDeleteNames(GL_TEXTURE, 12, &texID[0]); |
| |
| |
| Issues |
| |
| 01) What is the main benefit of these new entry-points? |
| |
| To reduce the requirement of new entry-points for generating and |
| deleting names. |
| |
| |
| 02) Do we want to use VERTEX_ARRAY_BINDING for a vertex array object? |
| |
| RECOMMENDATION - I suggest using a new variable called |
| VERTEX_ARRAY_OBJECT_AMD. This makes it clear |
| what's being generated. |
| |
| |
| 03) What do we want the generic buffer object name to be called |
| |
| RESOLVED - Use DATA_BUFFER_AMD. |
| |
| |
| 04) Do we want to include display list generation? |
| |
| RECOMMENDATION - No. There is additional restrictions on display list |
| name generation specifically items being |
| consecutively generated. |
| |
| |
| 05) Should DeleteNamesAMD verify that the names exist and throw an error |
| if not? |
| |
| RECOMMENDATION - I think not since it might cause issues with multi- |
| context multi-thread cases where sharing is enabled |
| and one context deletes them follwed by another |
| context deleting items. |
| |
| |
| |
| Revision History |
| |
| 1) September 11, 2009: myoung |
| - Initial revision of AMDX extension |
| |
| 2) February 10, 2010: myoung |
| - Change from AMDX to AMD extension |
| |
| 2) February 12, 2010: myoung |
| - Add in IsNameAMD functionality requested by Benedikt |
| |