VirtualBox

source: vbox/trunk/src/VBox/Additions/common/crOpenGL/pack/packspu_bufferobject.c@ 18950

Last change on this file since 18950 was 15532, checked in by vboxsync, 16 years ago

crOpenGL: export to OSE

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 2.6 KB
Line 
1/* Copyright (c) 2001, Stanford University
2 * All rights reserved
3 *
4 * See the file LICENSE.txt for information on redistributing this software.
5 */
6
7#include "cr_error.h"
8#include "cr_mem.h"
9#include "cr_string.h"
10#include "packspu.h"
11#include "packspu_proto.h"
12
13
14void * PACKSPU_APIENTRY
15packspu_MapBufferARB( GLenum target, GLenum access )
16{
17 GLint size = -1;
18 GET_CONTEXT(ctx);
19 void *buffer;
20 CRBufferObject *bufObj;
21
22 (void) crStateMapBufferARB( target, access );
23
24 crStateGetBufferParameterivARB(target, GL_BUFFER_SIZE_ARB, &size);
25 if (size <= 0)
26 return NULL;
27
28 if (crStateGetError()) {
29 /* something may have gone wrong already */
30 return NULL;
31 }
32
33 /* allocate buffer space */
34 buffer = crAlloc(size);
35 if (!buffer) {
36 return NULL;
37 }
38
39 /* update state tracker info */
40 if (target == GL_ARRAY_BUFFER_ARB) {
41 bufObj = ctx->clientState->bufferobject.arrayBuffer;
42 }
43 else {
44 CRASSERT(target == GL_ELEMENT_ARRAY_BUFFER_ARB);
45 bufObj = ctx->clientState->bufferobject.elementsBuffer;
46 }
47 bufObj->pointer = buffer;
48
49 /* Get current buffer data from server.
50 * Ideally, if we could detect that the entire buffer was being
51 * rewritten, we wouldn't have to fetch the current data here.
52 */
53 packspu_GetBufferSubDataARB(target, 0, bufObj->size, buffer);
54
55 return buffer;
56}
57
58
59GLboolean PACKSPU_APIENTRY
60packspu_UnmapBufferARB( GLenum target )
61{
62 CRBufferObject *bufObj;
63 GET_CONTEXT(ctx);
64
65 if (target == GL_ARRAY_BUFFER_ARB) {
66 bufObj = ctx->clientState->bufferobject.arrayBuffer;
67 }
68 else {
69 CRASSERT(target == GL_ELEMENT_ARRAY_BUFFER_ARB);
70 bufObj = ctx->clientState->bufferobject.elementsBuffer;
71 }
72
73 /* send new buffer contents to server */
74 crPackBufferDataARB( target, bufObj->size, bufObj->pointer, bufObj->usage );
75
76 /* free the buffer / unmap it */
77 crFree(bufObj->pointer);
78
79 crStateUnmapBufferARB( target );
80
81 return GL_TRUE;
82}
83
84
85void PACKSPU_APIENTRY
86packspu_BufferDataARB( GLenum target, GLsizeiptrARB size,
87 const GLvoid * data, GLenum usage )
88{
89 crStateBufferDataARB(target, size, data, usage);
90 crPackBufferDataARB(target, size, data, usage);
91}
92
93
94void PACKSPU_APIENTRY
95packspu_GetBufferPointervARB(GLenum target, GLenum pname, GLvoid **params)
96{
97 crStateGetBufferPointervARB( target, pname, params );
98}
99
100
101void PACKSPU_APIENTRY
102packspu_GetBufferParameterivARB( GLenum target, GLenum pname, GLint * params )
103{
104 crStateGetBufferParameterivARB( target, pname, params );
105}
106
107
108/*
109 * Need to update our local state for vertex arrays.
110 */
111void PACKSPU_APIENTRY
112packspu_BindBufferARB( GLenum target, GLuint buffer )
113{
114 crStateBindBufferARB(target, buffer);
115 crPackBindBufferARB(target, buffer);
116}
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette