VirtualBox

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

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

crOpenGL: use host side VBO when possible

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.4 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 GET_CONTEXT(ctx);
18 void *buffer;
19#if 0
20 CRBufferObject *bufObj;
21 GLint size = -1;
22
23 (void) crStateMapBufferARB( target, access );
24
25 crStateGetBufferParameterivARB(target, GL_BUFFER_SIZE_ARB, &size);
26 if (size <= 0)
27 return NULL;
28
29 if (crStateGetError()) {
30 /* something may have gone wrong already */
31 return NULL;
32 }
33
34 /* allocate buffer space */
35 buffer = crAlloc(size);
36 if (!buffer) {
37 return NULL;
38 }
39
40 /* update state tracker info */
41 if (target == GL_ARRAY_BUFFER_ARB) {
42 bufObj = ctx->clientState->bufferobject.arrayBuffer;
43 }
44 else {
45 CRASSERT(target == GL_ELEMENT_ARRAY_BUFFER_ARB);
46 bufObj = ctx->clientState->bufferobject.elementsBuffer;
47 }
48 bufObj->pointer = buffer;
49
50 /* Get current buffer data from server.
51 * Ideally, if we could detect that the entire buffer was being
52 * rewritten, we wouldn't have to fetch the current data here.
53 */
54 packspu_GetBufferSubDataARB(target, 0, bufObj->size, buffer);
55#else
56 CRASSERT(GL_TRUE == ctx->clientState->bufferobject.retainBufferData);
57 buffer = crStateMapBufferARB(target, access);
58#endif
59
60 return buffer;
61}
62
63void PACKSPU_APIENTRY packspu_GetBufferSubDataARB( GLenum target, GLintptrARB offset, GLsizeiptrARB size, void * data )
64{
65 crStateGetBufferSubDataARB(target, offset, size, data);
66}
67
68
69GLboolean PACKSPU_APIENTRY
70packspu_UnmapBufferARB( GLenum target )
71{
72 GET_CONTEXT(ctx);
73
74#if 0
75 CRBufferObject *bufObj;
76
77 if (target == GL_ARRAY_BUFFER_ARB) {
78 bufObj = ctx->clientState->bufferobject.arrayBuffer;
79 }
80 else {
81 CRASSERT(target == GL_ELEMENT_ARRAY_BUFFER_ARB);
82 bufObj = ctx->clientState->bufferobject.elementsBuffer;
83 }
84
85 /* send new buffer contents to server */
86 crPackBufferDataARB( target, bufObj->size, bufObj->pointer, bufObj->usage );
87
88 /* free the buffer / unmap it */
89 crFree(bufObj->pointer);
90#endif
91
92 crStateUnmapBufferARB( target );
93
94 return GL_TRUE;
95}
96
97
98void PACKSPU_APIENTRY
99packspu_BufferDataARB(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage)
100{
101 /*crDebug("packspu_BufferDataARB size:%d", size);*/
102 crStateBufferDataARB(target, size, data, usage);
103 crPackBufferDataARB(target, size, data, usage);
104}
105
106void PACKSPU_APIENTRY
107packspu_BufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data)
108{
109 /*crDebug("packspu_BufferSubDataARB size:%d", size);*/
110 crStateBufferSubDataARB(target, offset, size, data);
111 crPackBufferSubDataARB(target, offset, size, data);
112}
113
114
115void PACKSPU_APIENTRY
116packspu_GetBufferPointervARB(GLenum target, GLenum pname, GLvoid **params)
117{
118 crStateGetBufferPointervARB( target, pname, params );
119}
120
121
122void PACKSPU_APIENTRY
123packspu_GetBufferParameterivARB( GLenum target, GLenum pname, GLint * params )
124{
125 crStateGetBufferParameterivARB( target, pname, params );
126}
127
128
129/*
130 * Need to update our local state for vertex arrays.
131 */
132void PACKSPU_APIENTRY
133packspu_BindBufferARB( GLenum target, GLuint buffer )
134{
135 crStateBindBufferARB(target, buffer);
136 crPackBindBufferARB(target, buffer);
137}
Note: See TracBrowser for help on using the repository browser.

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