VirtualBox

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

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

crOpenGL: don't free buffer data on the guest side when unmapping

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 3.5 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 CR_ARB_vertex_buffer_object
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#endif
88
89 CRASSERT(GL_TRUE == ctx->clientState->bufferobject.retainBufferData);
90 crStateUnmapBufferARB( target );
91
92 return GL_TRUE;
93}
94
95
96void PACKSPU_APIENTRY
97packspu_BufferDataARB(GLenum target, GLsizeiptrARB size, const GLvoid * data, GLenum usage)
98{
99 /*crDebug("packspu_BufferDataARB size:%d", size);*/
100 crStateBufferDataARB(target, size, data, usage);
101 crPackBufferDataARB(target, size, data, usage);
102}
103
104void PACKSPU_APIENTRY
105packspu_BufferSubDataARB(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid * data)
106{
107 /*crDebug("packspu_BufferSubDataARB size:%d", size);*/
108 crStateBufferSubDataARB(target, offset, size, data);
109 crPackBufferSubDataARB(target, offset, size, data);
110}
111
112
113void PACKSPU_APIENTRY
114packspu_GetBufferPointervARB(GLenum target, GLenum pname, GLvoid **params)
115{
116 crStateGetBufferPointervARB( target, pname, params );
117}
118
119
120void PACKSPU_APIENTRY
121packspu_GetBufferParameterivARB( GLenum target, GLenum pname, GLint * params )
122{
123 crStateGetBufferParameterivARB( target, pname, params );
124}
125
126
127/*
128 * Need to update our local state for vertex arrays.
129 */
130void PACKSPU_APIENTRY
131packspu_BindBufferARB( GLenum target, GLuint buffer )
132{
133 crStateBindBufferARB(target, buffer);
134 crPackBindBufferARB(target, buffer);
135}
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