holdingarea/libEGL/src/EGLImage.cpp
branchbug235_bringup_0
changeset 20 d2d6724aef32
child 24 a3f46bb01be2
equal deleted inserted replaced
19:da7c1a80df0d 20:d2d6724aef32
       
     1 /* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     2  *
       
     3  * Permission is hereby granted, free of charge, to any person obtaining a
       
     4  * copy of this software and /or associated documentation files
       
     5  * (the "Materials "), to deal in the Materials without restriction,
       
     6  * including without limitation the rights to use, copy, modify, merge,
       
     7  * publish, distribute, sublicense, and/or sell copies of the Materials,
       
     8  * and to permit persons to whom the Materials are furnished to do so,
       
     9  * subject to the following conditions:
       
    10  *
       
    11  * The above copyright notice and this permission notice shall be included
       
    12  * in all copies or substantial portions of the Materials.
       
    13  *
       
    14  * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
       
    15  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
       
    16  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
       
    17  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
       
    18  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
       
    19  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR
       
    20  * THE USE OR OTHER DEALINGS IN THE MATERIALS.
       
    21  *
       
    22  * Initial Contributors:
       
    23  * Nokia Corporation - initial contribution.
       
    24  *
       
    25  * Contributors:
       
    26  *
       
    27  * Description:
       
    28  *
       
    29  */
       
    30 
       
    31 #include "EGLImage.h"
       
    32 #include "EGLUtils.h"
       
    33 #include "EGLState.h"
       
    34 #include <EGL/eglext.h>
       
    35 #include <VG/openvg.h>
       
    36 
       
    37 #include <stdlib.h>
       
    38 
       
    39 CEGLImage::CEGLImage( EGLenum target, EGLClientBuffer buffer, 
       
    40                       SurfaceDescriptor desc, void* data) :
       
    41     m_buffer( buffer ),
       
    42     m_target( target ),
       
    43 	m_data(data)
       
    44     {
       
    45     m_siblings = EGLI_NEW EGLImageSibling;
       
    46     m_siblings->buffer = buffer;
       
    47     m_siblings->target = target;
       
    48     m_siblings->next   = NULL;
       
    49     m_SurfDesc.m_alphaShift     = desc.m_alphaShift;
       
    50     m_SurfDesc.m_blueShift      = desc.m_blueShift;
       
    51     m_SurfDesc.m_depthSize      = desc.m_depthSize;
       
    52     m_SurfDesc.m_greenShift     = desc.m_greenShift;
       
    53     m_SurfDesc.m_height         = desc.m_height;
       
    54     m_SurfDesc.m_luminanceShift = desc.m_luminanceShift;
       
    55     m_SurfDesc.m_maskSize       = desc.m_maskSize;
       
    56     m_SurfDesc.m_redShift       = desc.m_redShift;
       
    57     m_SurfDesc.m_stencilSize    = desc.m_stencilSize;
       
    58     m_SurfDesc.m_stride         = desc.m_stride;
       
    59     m_SurfDesc.m_width          = desc.m_width;
       
    60 
       
    61     m_SurfDesc.m_colorDescriptor.m_alphaMaskSize = desc.m_colorDescriptor.m_alphaMaskSize;
       
    62     m_SurfDesc.m_colorDescriptor.m_alphaSize     = desc.m_colorDescriptor.m_alphaSize;
       
    63     m_SurfDesc.m_colorDescriptor.m_blueSize      = desc.m_colorDescriptor.m_blueSize;
       
    64     m_SurfDesc.m_colorDescriptor.m_bpp           = desc.m_colorDescriptor.m_bpp;
       
    65     m_SurfDesc.m_colorDescriptor.m_format        = desc.m_colorDescriptor.m_format;
       
    66     m_SurfDesc.m_colorDescriptor.m_greenSize     = desc.m_colorDescriptor.m_greenSize;
       
    67     m_SurfDesc.m_colorDescriptor.m_luminanceSize = desc.m_colorDescriptor.m_luminanceSize;
       
    68     m_SurfDesc.m_colorDescriptor.m_redSize       = desc.m_colorDescriptor.m_redSize;
       
    69     }
       
    70 
       
    71 CEGLImage::~CEGLImage(void)
       
    72     {
       
    73     // tero 2010-08-02, changed to free, since delete is _certainly_ incorrect.
       
    74     if( m_data )
       
    75     free(m_data);
       
    76     m_data = NULL;
       
    77     DestroyAllSiblings();
       
    78     }
       
    79 
       
    80 void CEGLImage::AddSibling( EGLenum target, EGLClientBuffer buffer )
       
    81     {
       
    82     EGLImageSibling* newp;
       
    83     EGLImageSibling* curr = m_siblings;
       
    84     newp = EGLI_NEW EGLImageSibling;
       
    85     newp->buffer = buffer;
       
    86     newp->target = target;
       
    87     newp->next   = NULL;
       
    88 
       
    89     while( curr->next )
       
    90         {
       
    91         curr = curr->next;
       
    92         }      
       
    93     curr->next = newp;
       
    94     }
       
    95 
       
    96 void CEGLImage::UpdateData( CEGLState *state, void* data )
       
    97     {
       
    98     EGLImageSibling* curr = m_siblings;
       
    99     while( curr )
       
   100         {
       
   101         switch ( curr->target )
       
   102             {
       
   103             case EGL_VG_PARENT_IMAGE_KHR:
       
   104                 {
       
   105                 // OpenVG
       
   106 
       
   107                 }
       
   108                 break;
       
   109             case EGL_GL_TEXTURE_2D_KHR:
       
   110 		    case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR:
       
   111             case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR:
       
   112             case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR:
       
   113             case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR:
       
   114             case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR:
       
   115             case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR:
       
   116                 {
       
   117                 // GLES
       
   118                 IEGLtoGLES2Interface* iFace = (IEGLtoGLES2Interface*)state->GLESInterface(2);
       
   119                 //iFace->UpdateBuffers(
       
   120                 }
       
   121                 break;
       
   122             default:
       
   123                 break;
       
   124             }
       
   125         curr = curr->next;
       
   126         }
       
   127     }
       
   128 
       
   129 void CEGLImage::DestroyAllSiblings()
       
   130     {
       
   131     EGLImageSibling* curr = m_siblings;
       
   132     EGLImageSibling* next = curr->next;
       
   133 
       
   134     while( curr )
       
   135         {
       
   136         next = curr->next;
       
   137         free( curr );
       
   138         curr = next;
       
   139         }
       
   140     }