/*
* Mesa 3-D graphics library
- * Version: 7.5
*
* Copyright (C) 1999-2008 Brian Paul All Rights Reserved.
* Copyright (C) 2009 VMware, Inc. All Rights Reserved.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
*/
/**
#include "glheader.h"
-#include "colormac.h"
#include "context.h"
#include "enums.h"
#include "feedback.h"
#include "macros.h"
-#include "mfeatures.h"
#include "mtypes.h"
-#include "main/dispatch.h"
-
-
-#if FEATURE_feedback
#define FB_3D 0x01
-static void GLAPIENTRY
+void GLAPIENTRY
_mesa_FeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer )
{
GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END(ctx);
if (ctx->RenderMode==GL_FEEDBACK) {
_mesa_error( ctx, GL_INVALID_OPERATION, "glFeedbackBuffer" );
ctx->Feedback.Type = type;
ctx->Feedback.BufferSize = size;
ctx->Feedback.Buffer = buffer;
- ctx->Feedback.Count = 0; /* Becaues of this. */
+ ctx->Feedback.Count = 0; /* Because of this. */
}
-static void GLAPIENTRY
+void GLAPIENTRY
_mesa_PassThrough( GLfloat token )
{
GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END(ctx);
if (ctx->RenderMode==GL_FEEDBACK) {
FLUSH_VERTICES(ctx, 0);
* Verifies we're not in selection mode, flushes the vertices and initialize
* the fields in __struct gl_contextRec::Select with the given buffer.
*/
-static void GLAPIENTRY
+void GLAPIENTRY
_mesa_SelectBuffer( GLsizei size, GLuint *buffer )
{
GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+ if (size < 0) {
+ _mesa_error(ctx, GL_INVALID_VALUE, "glSelectBuffer(size)");
+ return;
+ }
if (ctx->RenderMode==GL_SELECT) {
_mesa_error( ctx, GL_INVALID_OPERATION, "glSelectBuffer" );
* Verifies there is free space in the buffer to write the value and
* increments the pointer.
*/
-static INLINE void
+static inline void
write_record(struct gl_context *ctx, GLuint value)
{
if (ctx->Select.BufferCount < ctx->Select.BufferSize) {
* the hit record data in gl_selection. Marks new render mode in
* __struct gl_contextRec::NewState.
*/
-static void GLAPIENTRY
+void GLAPIENTRY
_mesa_InitNames( void )
{
GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
+ FLUSH_VERTICES(ctx, 0);
/* Record the hit before the HitFlag is wiped out again. */
if (ctx->RenderMode == GL_SELECT) {
*
* sa __struct gl_contextRec::Select.
*/
-static void GLAPIENTRY
+void GLAPIENTRY
_mesa_LoadName( GLuint name )
{
GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END(ctx);
if (ctx->RenderMode != GL_SELECT) {
return;
*
* sa __struct gl_contextRec::Select.
*/
-static void GLAPIENTRY
+void GLAPIENTRY
_mesa_PushName( GLuint name )
{
GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END(ctx);
if (ctx->RenderMode != GL_SELECT) {
return;
*
* sa __struct gl_contextRec::Select.
*/
-static void GLAPIENTRY
+void GLAPIENTRY
_mesa_PopName( void )
{
GET_CURRENT_CONTEXT(ctx);
- ASSERT_OUTSIDE_BEGIN_END(ctx);
if (ctx->RenderMode != GL_SELECT) {
return;
* __struct gl_contextRec::RenderMode and notifies the driver via the
* dd_function_table::RenderMode callback.
*/
-static GLint GLAPIENTRY
+GLint GLAPIENTRY
_mesa_RenderMode( GLenum mode )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, 0);
if (MESA_VERBOSE & VERBOSE_API)
- _mesa_debug(ctx, "glRenderMode %s\n", _mesa_lookup_enum_by_nr(mode));
+ _mesa_debug(ctx, "glRenderMode %s\n", _mesa_enum_to_string(mode));
FLUSH_VERTICES(ctx, _NEW_RENDERMODE);
}
if (ctx->Select.BufferCount > ctx->Select.BufferSize) {
/* overflow */
-#ifdef DEBUG
+#ifndef NDEBUG
_mesa_warning(ctx, "Feedback buffer overflow");
#endif
result = -1;
ctx->Select.Hits = 0;
ctx->Select.NameStackDepth = 0;
break;
-#if _HAVE_FULL_GL
case GL_FEEDBACK:
if (ctx->Feedback.Count > ctx->Feedback.BufferSize) {
/* overflow */
}
ctx->Feedback.Count = 0;
break;
-#endif
default:
_mesa_error( ctx, GL_INVALID_ENUM, "glRenderMode" );
return 0;
_mesa_error( ctx, GL_INVALID_OPERATION, "glRenderMode" );
}
break;
-#if _HAVE_FULL_GL
case GL_FEEDBACK:
if (ctx->Feedback.BufferSize==0) {
/* haven't called glFeedbackBuffer yet */
_mesa_error( ctx, GL_INVALID_OPERATION, "glRenderMode" );
}
break;
-#endif
default:
_mesa_error( ctx, GL_INVALID_ENUM, "glRenderMode" );
return 0;
/*@}*/
-void
-_mesa_init_feedback_dispatch(struct _glapi_table *disp)
-{
- SET_InitNames(disp, _mesa_InitNames);
- SET_FeedbackBuffer(disp, _mesa_FeedbackBuffer);
- SET_LoadName(disp, _mesa_LoadName);
- SET_PassThrough(disp, _mesa_PassThrough);
- SET_PopName(disp, _mesa_PopName);
- SET_PushName(disp, _mesa_PushName);
- SET_SelectBuffer(disp, _mesa_SelectBuffer);
- SET_RenderMode(disp, _mesa_RenderMode);
-}
-
-
-#endif /* FEATURE_feedback */
-
-
/**********************************************************************/
/** \name Initialization */
/*@{*/