Home | History | Annotate | Download | only in osmesa

Lines Matching full:osmesa

38 #include "GL/osmesa.h"
69 * OSMesa rendering context, derived from core Mesa struct gl_context.
138 (DST)[osmesa->rInd] = R; \
139 (DST)[osmesa->gInd] = G; \
140 (DST)[osmesa->bInd] = B; \
141 (DST)[osmesa->aInd] = A; \
144 #define PIXELADDR4(X,Y) ((GLchan *) osmesa->rowaddr[Y] + 4 * (X))
148 * Draw a flat-shaded, RGB line into an osmesa buffer.
153 const OSMesaContext osmesa = OSMESA_CONTEXT(ctx); \
167 * Draw a flat-shaded, Z-less, RGB line into an osmesa buffer.
174 const OSMesaContext osmesa = OSMESA_CONTEXT(ctx); \
198 const OSMesaContext osmesa = OSMESA_CONTEXT(ctx);
219 if (osmesa->format != OSMESA_RGBA &&
220 osmesa->format != OSMESA_BGRA &&
221 osmesa->format != OSMESA_ARGB) {
254 const OSMesaContext osmesa = OSMESA_CONTEXT(ctx);
284 const OSMesaContext osmesa = OSMESA_CONTEXT(ctx); \
312 const OSMesaContext osmesa = OSMESA_CONTEXT(ctx);
330 if (osmesa->format != OSMESA_RGBA &&
331 osmesa->format != OSMESA_BGRA &&
332 osmesa->format != OSMESA_ARGB) {
388 compute_row_addresses( OSMesaContext osmesa )
391 GLubyte *origin = (GLubyte *) osmesa->srb->Buffer;
393 GLint height = osmesa->srb->Base.Height;
395 if (osmesa->userRowLength)
396 rowlength = osmesa->userRowLength;
398 rowlength = osmesa->srb->Base.Width;
400 bytesPerRow = rowlength * _mesa_get_format_bytes(osmesa->srb->Base.Format);
402 if (osmesa->yup) {
405 osmesa->rowaddr[i] = (GLvoid *) ((GLubyte *) origin + i * bytesPerRow);
412 osmesa->rowaddr[i] = (GLvoid *) ((GLubyte *) origin + j * bytesPerRow);
438 const OSMesaContext osmesa = OSMESA_CONTEXT(ctx);
450 if (osmesa->format == OSMESA_RGBA) {
451 if (osmesa->DataType == GL_UNSIGNED_BYTE) {
457 else if (osmesa->DataType == GL_UNSIGNED_SHORT) {
464 else if (osmesa->format == OSMESA_BGRA) {
465 if (osmesa->DataType == GL_UNSIGNED_BYTE) {
471 else if (osmesa->DataType == GL_UNSIGNED_SHORT) {
472 _mesa_warning(ctx, "Unsupported OSMesa format BGRA/GLushort");
476 _mesa_warning(ctx, "Unsupported OSMesa format BGRA/GLfloat");
480 else if (osmesa->format == OSMESA_ARGB) {
481 if (osmesa->DataType == GL_UNSIGNED_BYTE) {
487 else if (osmesa->DataType == GL_UNSIGNED_SHORT) {
488 _mesa_warning(ctx, "Unsupported OSMesa format ARGB/GLushort");
492 _mesa_warning(ctx, "Unsupported OSMesa format ARGB/GLfloat");
496 else if (osmesa->format == OSMESA_RGB) {
497 if (osmesa->DataType == GL_UNSIGNED_BYTE) {
500 else if (osmesa->DataType == GL_UNSIGNED_SHORT) {
501 _mesa_warning(ctx, "Unsupported OSMesa format RGB/GLushort");
505 _mesa_warning(ctx, "Unsupported OSMesa format RGB/GLfloat");
509 else if (osmesa->format == OSMESA_BGR) {
510 if (osmesa->DataType == GL_UNSIGNED_BYTE) {
513 else if (osmesa->DataType == GL_UNSIGNED_SHORT) {
514 _mesa_warning(ctx, "Unsupported OSMesa format BGR/GLushort");
518 _mesa_warning(ctx, "Unsupported OSMesa format BGR/GLfloat");
522 else if (osmesa->format == OSMESA_RGB_565) {
523 assert(osmesa->DataType == GL_UNSIGNED_BYTE);
527 _mesa_problem(ctx, "bad pixel format in osmesa renderbuffer_storage");
533 compute_row_addresses( osmesa );
573 const OSMesaContext osmesa = OSMESA_CONTEXT(ctx);
576 /* this is an OSMesa renderbuffer which wraps user memory */
581 if (osmesa->userRowLength)
582 rowStride = osmesa->userRowLength * bpp;
586 if (!osmesa->yup) {
672 OSMesaContext osmesa;
807 osmesa = (OSMesaContext) CALLOC_STRUCT(osmesa_context);
808 if (osmesa) {
809 osmesa->gl_visual = _mesa_create_visual( GL_FALSE, /* double buffer */
823 if (!osmesa->gl_visual) {
824 free(osmesa);
834 if (!_mesa_initialize_context(&osmesa->mesa,
836 osmesa->gl_visual,
840 _mesa_destroy_visual( osmesa->gl_visual );
841 free(osmesa);
845 _mesa_enable_sw_extensions(&(osmesa->mesa));
847 osmesa->gl_buffer = _mesa_create_framebuffer(osmesa->gl_visual);
848 if (!osmesa->gl_buffer) {
849 _mesa_destroy_visual( osmesa->gl_visual );
850 _mesa_free_context_data( &osmesa->mesa );
851 free(osmesa);
858 _swrast_add_soft_renderbuffers(osmesa->gl_buffer,
860 osmesa->gl_visual->haveDepthBuffer,
861 osmesa->gl_visual->haveStencilBuffer,
862 osmesa->gl_visual->haveAccumBuffer,
866 osmesa->format = format;
867 osmesa->userRowLength = 0;
868 osmesa->yup = GL_TRUE;
869 osmesa->rInd = rind;
870 osmesa->gInd = gind;
871 osmesa->bInd = bind;
872 osmesa->aInd = aind;
874 _mesa_meta_init(&osmesa->mesa);
878 struct gl_context *ctx = &osmesa->mesa;
886 _mesa_destroy_visual(osmesa->gl_visual);
888 free(osmesa);
913 _mesa_destroy_visual(osmesa->gl_visual);
915 free(osmesa);
924 return osmesa;
931 * \param osmesa the context to destroy
934 OSMesaDestroyContext( OSMesaContext osmesa )
936 if (osmesa) {
937 if (osmesa->srb)
938 _mesa_reference_renderbuffer((struct gl_renderbuffer **) &osmesa->srb, NULL);
940 _mesa_meta_free( &osmesa->mesa );
942 _swsetup_DestroyContext( &osmesa->mesa );
943 _tnl_DestroyContext( &osmesa->mesa );
944 _vbo_DestroyContext( &osmesa->mesa );
945 _swrast_DestroyContext( &osmesa->mesa );
947 _mesa_destroy_visual( osmesa->gl_visual );
948 _mesa_reference_framebuffer( &osmesa->gl_buffer, NULL );
950 _mesa_free_context_data( &osmesa->mesa );
951 free( osmesa );
972 * Input: osmesa - the rendering context
981 * Return: GL_TRUE if success, GL_FALSE if error because of invalid osmesa,
986 OSMesaMakeCurrent( OSMesaContext osmesa, void *buffer, GLenum type,
989 if (!osmesa && !buffer) {
993 if (!osmesa || !buffer ||
999 if (osmesa->format == OSMESA_RGB_565 && type != GL_UNSIGNED_SHORT_5_6_5) {
1012 osmesa_update_state( &osmesa->mesa, 0 );
1028 if (!osmesa->srb) {
1029 osmesa->srb = new_osmesa_renderbuffer(&osmesa->mesa, osmesa->format, type);
1030 _mesa_remove_renderbuffer(osmesa->gl_buffer, BUFFER_FRONT_LEFT);
1031 _mesa_add_renderbuffer(osmesa->gl_buffer, BUFFER_FRONT_LEFT,
1032 &osmesa->srb->Base);
1033 assert(osmesa->srb->Base.RefCount == 2);
1036 osmesa->DataType = type;
1041 osmesa->srb->Buffer = buffer;
1042 osmesa->srb->Base.Width = osmesa->srb->Base.Height = 0;
1047 _mesa_resize_framebuffer(&osmesa->mesa, osmesa->gl_buffer, width, height);
1049 _mesa_make_current( &osmesa->mesa, osmesa->gl_buffer, osmesa->gl_buffer );
1054 _mesa_remove_renderbuffer(osmesa->gl_buffer, BUFFER_FRONT_LEFT);
1055 _mesa_add_renderbuffer(osmesa->gl_buffer, BUFFER_FRONT_LEFT,
1056 &osmesa->srb->Base);
1060 _mesa_update_framebuffer_visual(&osmesa->mesa, osmesa->gl_buffer);
1063 _mesa_resize_framebuffer(&osmesa->mesa, osmesa->gl_buffer, width, height);
1085 OSMesaContext osmesa = OSMesaGetCurrentContext();
1090 _mesa_error( &osmesa->mesa, GL_INVALID_VALUE,
1094 osmesa->userRowLength = value;
1097 osmesa->yup = value ? GL_TRUE : GL_FALSE;
1100 _mesa_error( &osmesa->mesa, GL_INVALID_ENUM, "OSMesaPixelStore(pname)" );
1104 compute_row_addresses( osmesa );
1111 OSMesaContext osmesa = OSMesaGetCurrentContext();
1115 if (osmesa->gl_buffer)
1116 *value = osmesa->gl_buffer->Width;
1121 if (osmesa->gl_buffer)
1122 *value = osmesa->gl_buffer->Height;
1127 *value = osmesa->format;
1131 *value = osmesa->DataType;
1134 *value = osmesa->userRowLength;
1137 *value = osmesa->yup;
1146 _mesa_error(&osmesa->mesa, GL_INVALID_ENUM, "OSMesaGetIntergerv(pname)");
1153 * Return the depth buffer associated with an OSMesa context.
1154 * Input: c - the OSMesa context
1191 * Return the color buffer associated with an OSMesa context.
1192 * Input: c - the OSMesa context
1199 OSMesaGetColorBuffer( OSMesaContext osmesa, GLint *width,
1202 if (osmesa->srb && osmesa->srb->Buffer) {
1203 *width = osmesa->srb->Base.Width;
1204 *height = osmesa->srb->Base.Height;
1205 *format = osmesa->format;
1206 *buffer = (void *) osmesa->srb->Buffer;
1258 OSMesaContext osmesa = OSMesaGetCurrentContext();
1261 osmesa->mesa.Color.ClampFragmentColor = GL_TRUE;
1264 osmesa->mesa.Color.ClampFragmentColor = GL_FIXED_ONLY_ARB;
1270 OSMesaPostprocess(OSMesaContext osmesa, const char *filter,