📄 dlist.c
字号:
}
if (ctx->ExecuteFlag) {
CALL_DrawBuffer(ctx->Exec, ( mode ));
}
}
static void GLAPIENTRY save_DrawPixels( GLsizei width, GLsizei height,
GLenum format, GLenum type,
const GLvoid *pixels )
{
GET_CURRENT_CONTEXT(ctx);
GLvoid *image = unpack_image(2, width, height, 1, format, type,
pixels, &ctx->Unpack);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_DRAW_PIXELS, 5 );
if (n) {
n[1].i = width;
n[2].i = height;
n[3].e = format;
n[4].e = type;
n[5].data = image;
}
else if (image) {
FREE(image);
}
if (ctx->ExecuteFlag) {
CALL_DrawPixels(ctx->Exec, ( width, height, format, type, pixels ));
}
}
static void GLAPIENTRY save_Enable( GLenum cap )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_ENABLE, 1 );
if (n) {
n[1].e = cap;
}
if (ctx->ExecuteFlag) {
CALL_Enable(ctx->Exec, ( cap ));
}
}
void GLAPIENTRY _mesa_save_EvalMesh1( GLenum mode, GLint i1, GLint i2 )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_EVALMESH1, 3 );
if (n) {
n[1].e = mode;
n[2].i = i1;
n[3].i = i2;
}
if (ctx->ExecuteFlag) {
CALL_EvalMesh1(ctx->Exec, ( mode, i1, i2 ));
}
}
void GLAPIENTRY _mesa_save_EvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_EVALMESH2, 5 );
if (n) {
n[1].e = mode;
n[2].i = i1;
n[3].i = i2;
n[4].i = j1;
n[5].i = j2;
}
if (ctx->ExecuteFlag) {
CALL_EvalMesh2(ctx->Exec, ( mode, i1, i2, j1, j2 ));
}
}
static void GLAPIENTRY save_Fogfv( GLenum pname, const GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_FOG, 5 );
if (n) {
n[1].e = pname;
n[2].f = params[0];
n[3].f = params[1];
n[4].f = params[2];
n[5].f = params[3];
}
if (ctx->ExecuteFlag) {
CALL_Fogfv(ctx->Exec, ( pname, params ));
}
}
static void GLAPIENTRY save_Fogf( GLenum pname, GLfloat param )
{
save_Fogfv(pname, ¶m);
}
static void GLAPIENTRY save_Fogiv(GLenum pname, const GLint *params )
{
GLfloat p[4];
switch (pname) {
case GL_FOG_MODE:
case GL_FOG_DENSITY:
case GL_FOG_START:
case GL_FOG_END:
case GL_FOG_INDEX:
p[0] = (GLfloat) *params;
break;
case GL_FOG_COLOR:
p[0] = INT_TO_FLOAT( params[0] );
p[1] = INT_TO_FLOAT( params[1] );
p[2] = INT_TO_FLOAT( params[2] );
p[3] = INT_TO_FLOAT( params[3] );
break;
default:
/* Error will be caught later in gl_Fogfv */
;
}
save_Fogfv(pname, p);
}
static void GLAPIENTRY save_Fogi(GLenum pname, GLint param )
{
save_Fogiv(pname, ¶m);
}
static void GLAPIENTRY save_FrontFace( GLenum mode )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_FRONT_FACE, 1 );
if (n) {
n[1].e = mode;
}
if (ctx->ExecuteFlag) {
CALL_FrontFace(ctx->Exec, ( mode ));
}
}
static void GLAPIENTRY save_Frustum( GLdouble left, GLdouble right,
GLdouble bottom, GLdouble top,
GLdouble nearval, GLdouble farval )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_FRUSTUM, 6 );
if (n) {
n[1].f = (GLfloat) left;
n[2].f = (GLfloat) right;
n[3].f = (GLfloat) bottom;
n[4].f = (GLfloat) top;
n[5].f = (GLfloat) nearval;
n[6].f = (GLfloat) farval;
}
if (ctx->ExecuteFlag) {
CALL_Frustum(ctx->Exec, ( left, right, bottom, top, nearval, farval ));
}
}
static void GLAPIENTRY save_Hint( GLenum target, GLenum mode )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_HINT, 2 );
if (n) {
n[1].e = target;
n[2].e = mode;
}
if (ctx->ExecuteFlag) {
CALL_Hint(ctx->Exec, ( target, mode ));
}
}
static void GLAPIENTRY
save_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink)
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_HISTOGRAM, 4 );
if (n) {
n[1].e = target;
n[2].i = width;
n[3].e = internalFormat;
n[4].b = sink;
}
if (ctx->ExecuteFlag) {
CALL_Histogram(ctx->Exec, ( target, width, internalFormat, sink ));
}
}
static void GLAPIENTRY save_IndexMask( GLuint mask )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_INDEX_MASK, 1 );
if (n) {
n[1].ui = mask;
}
if (ctx->ExecuteFlag) {
CALL_IndexMask(ctx->Exec, ( mask ));
}
}
static void GLAPIENTRY save_InitNames( void )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
(void) ALLOC_INSTRUCTION( ctx, OPCODE_INIT_NAMES, 0 );
if (ctx->ExecuteFlag) {
CALL_InitNames(ctx->Exec, ());
}
}
static void GLAPIENTRY save_Lightfv( GLenum light, GLenum pname, const GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_LIGHT, 6 );
if (OPCODE_LIGHT) {
GLint i, nParams;
n[1].e = light;
n[2].e = pname;
switch (pname) {
case GL_AMBIENT:
nParams = 4;
break;
case GL_DIFFUSE:
nParams = 4;
break;
case GL_SPECULAR:
nParams = 4;
break;
case GL_POSITION:
nParams = 4;
break;
case GL_SPOT_DIRECTION:
nParams = 3;
break;
case GL_SPOT_EXPONENT:
nParams = 1;
break;
case GL_SPOT_CUTOFF:
nParams = 1;
break;
case GL_CONSTANT_ATTENUATION:
nParams = 1;
break;
case GL_LINEAR_ATTENUATION:
nParams = 1;
break;
case GL_QUADRATIC_ATTENUATION:
nParams = 1;
break;
default:
nParams = 0;
}
for (i = 0; i < nParams; i++) {
n[3+i].f = params[i];
}
}
if (ctx->ExecuteFlag) {
CALL_Lightfv(ctx->Exec, ( light, pname, params ));
}
}
static void GLAPIENTRY save_Lightf( GLenum light, GLenum pname, GLfloat params )
{
save_Lightfv(light, pname, ¶ms);
}
static void GLAPIENTRY save_Lightiv( GLenum light, GLenum pname, const GLint *params )
{
GLfloat fparam[4];
switch (pname) {
case GL_AMBIENT:
case GL_DIFFUSE:
case GL_SPECULAR:
fparam[0] = INT_TO_FLOAT( params[0] );
fparam[1] = INT_TO_FLOAT( params[1] );
fparam[2] = INT_TO_FLOAT( params[2] );
fparam[3] = INT_TO_FLOAT( params[3] );
break;
case GL_POSITION:
fparam[0] = (GLfloat) params[0];
fparam[1] = (GLfloat) params[1];
fparam[2] = (GLfloat) params[2];
fparam[3] = (GLfloat) params[3];
break;
case GL_SPOT_DIRECTION:
fparam[0] = (GLfloat) params[0];
fparam[1] = (GLfloat) params[1];
fparam[2] = (GLfloat) params[2];
break;
case GL_SPOT_EXPONENT:
case GL_SPOT_CUTOFF:
case GL_CONSTANT_ATTENUATION:
case GL_LINEAR_ATTENUATION:
case GL_QUADRATIC_ATTENUATION:
fparam[0] = (GLfloat) params[0];
break;
default:
/* error will be caught later in gl_Lightfv */
;
}
save_Lightfv( light, pname, fparam );
}
static void GLAPIENTRY save_Lighti( GLenum light, GLenum pname, GLint param )
{
save_Lightiv( light, pname, ¶m );
}
static void GLAPIENTRY save_LightModelfv( GLenum pname, const GLfloat *params )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_LIGHT_MODEL, 5 );
if (n) {
n[1].e = pname;
n[2].f = params[0];
n[3].f = params[1];
n[4].f = params[2];
n[5].f = params[3];
}
if (ctx->ExecuteFlag) {
CALL_LightModelfv(ctx->Exec, ( pname, params ));
}
}
static void GLAPIENTRY save_LightModelf( GLenum pname, GLfloat param )
{
save_LightModelfv(pname, ¶m);
}
static void GLAPIENTRY save_LightModeliv( GLenum pname, const GLint *params )
{
GLfloat fparam[4];
switch (pname) {
case GL_LIGHT_MODEL_AMBIENT:
fparam[0] = INT_TO_FLOAT( params[0] );
fparam[1] = INT_TO_FLOAT( params[1] );
fparam[2] = INT_TO_FLOAT( params[2] );
fparam[3] = INT_TO_FLOAT( params[3] );
break;
case GL_LIGHT_MODEL_LOCAL_VIEWER:
case GL_LIGHT_MODEL_TWO_SIDE:
case GL_LIGHT_MODEL_COLOR_CONTROL:
fparam[0] = (GLfloat) params[0];
break;
default:
/* Error will be caught later in gl_LightModelfv */
;
}
save_LightModelfv(pname, fparam);
}
static void GLAPIENTRY save_LightModeli( GLenum pname, GLint param )
{
save_LightModeliv(pname, ¶m);
}
static void GLAPIENTRY save_LineStipple( GLint factor, GLushort pattern )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_LINE_STIPPLE, 2 );
if (n) {
n[1].i = factor;
n[2].us = pattern;
}
if (ctx->ExecuteFlag) {
CALL_LineStipple(ctx->Exec, ( factor, pattern ));
}
}
static void GLAPIENTRY save_LineWidth( GLfloat width )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_LINE_WIDTH, 1 );
if (n) {
n[1].f = width;
}
if (ctx->ExecuteFlag) {
CALL_LineWidth(ctx->Exec, ( width ));
}
}
static void GLAPIENTRY save_ListBase( GLuint base )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_LIST_BASE, 1 );
if (n) {
n[1].ui = base;
}
if (ctx->ExecuteFlag) {
CALL_ListBase(ctx->Exec, ( base ));
}
}
static void GLAPIENTRY save_LoadIdentity( void )
{
GET_CURRENT_CONTEXT(ctx);
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
(void) ALLOC_INSTRUCTION( ctx, OPCODE_LOAD_IDENTITY, 0 );
if (ctx->ExecuteFlag) {
CALL_LoadIdentity(ctx->Exec, ());
}
}
static void GLAPIENTRY save_LoadMatrixf( const GLfloat *m )
{
GET_CURRENT_CONTEXT(ctx);
Node *n;
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = ALLOC_INSTRUCTION( ctx, OPCODE_LOAD_MATRIX, 16 );
if (n) {
GLuint i;
for (i=0;i<16;i++) {
n[1+i].f = m[i];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -