symbian-qemu-0.9.1-12/model-libraries/syborg-graphicswrapper/syborg-graphicswrapper.cpp
author Gareth Stockwell <gareth.stockwell@accenture.com>
Wed, 22 Sep 2010 15:40:40 +0100
branchgraphics-phase-3
changeset 111 345f1c88c950
parent 110 52ce3e8fba90
permissions -rw-r--r--
Fixes to syborg-graphicswrapper.vcproj These changes allow syborg-graphicswrapper to link against the hostthreadadapter and khronosapiwrapper libraries built by the graphics.simulator component. The .vcproj file uses relative paths, which requires that the following three packages are laid out as follows: os/ graphics adapt/ graphics.simulator qemu
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
77
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
     1
// This is the main DLL file.
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
     2
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
     3
#include "platformtypes.h"
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
     4
#include <KhronosAPIWrapper.h>
110
52ce3e8fba90 Header and class name changes
Jani Hyvonen<jani.hyvonen@nokia.com>
parents: 77
diff changeset
     5
#include <guestvideodriverinterfaceconstants.h>  //Registers and enums 
77
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
     6
#include <platformthreading.h>  //mutex
110
52ce3e8fba90 Header and class name changes
Jani Hyvonen<jani.hyvonen@nokia.com>
parents: 77
diff changeset
     7
#include <graphicsvhwcallback.h>
111
345f1c88c950 Fixes to syborg-graphicswrapper.vcproj
Gareth Stockwell <gareth.stockwell@accenture.com>
parents: 110
diff changeset
     8
#include "syborg-graphicswrapper.h"
77
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
     9
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    10
SyborgGraphicsWrapper::SyborgGraphicsWrapper()
110
52ce3e8fba90 Header and class name changes
Jani Hyvonen<jani.hyvonen@nokia.com>
parents: 77
diff changeset
    11
    {															
77
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    12
    }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    13
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    14
SyborgGraphicsWrapper::~SyborgGraphicsWrapper()
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    15
    {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    16
    delete m_wrapper;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    17
    m_wrapper = 0;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    18
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    19
    Psu::platform_release_semaphore(m_outputBufferSemaphore);
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    20
    }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    21
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    22
int SyborgGraphicsWrapper::Reset( uint32_t *aGraphicsMemBase,  uint32_t *aCommandMemBase )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    23
    {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    24
    int ret = -1;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    25
    if ( m_wrapper )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    26
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    27
        delete m_wrapper;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    28
	    }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    29
    m_wrapper = NULL;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    30
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    31
    uint8_t *cmd_buffer = (uint8_t *)aCommandMemBase;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    32
    uint8_t *frame_buffer = (uint8_t *)aGraphicsMemBase;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    33
    if( (cmd_buffer != NULL) && (frame_buffer != NULL) )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    34
        {
110
52ce3e8fba90 Header and class name changes
Jani Hyvonen<jani.hyvonen@nokia.com>
parents: 77
diff changeset
    35
        m_wrapper = new KhronosAPIWrapper( (MGraphicsVHWCallback*)this,
77
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    36
            frame_buffer, &cmd_buffer[VVHW_INPUT_BASE], &cmd_buffer[VVHW_OUTPUT_BASE] );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    37
        //Reset synchronisation mechanisms
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    38
        Psu::platform_release_semaphore(m_outputBufferSemaphore);
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    39
        Psu::platform_create_semaphore(m_outputBufferSemaphore, 1, 1);
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    40
        ret = 0;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    41
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    42
    else
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    43
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    44
        ret = -1;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    45
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    46
    return ret;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    47
    }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    48
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    49
void SyborgGraphicsWrapper::LockOutputBuffer()
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    50
    {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    51
    #ifdef KHRONOS_API_W_MULTITHREAD
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    52
    Psu::platform_wait_for_signal(m_outputBufferSemaphore);
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    53
    #endif
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    54
    }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    55
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    56
void SyborgGraphicsWrapper::ReleaseOutputBuffer(){}
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    57
110
52ce3e8fba90 Header and class name changes
Jani Hyvonen<jani.hyvonen@nokia.com>
parents: 77
diff changeset
    58
void SyborgGraphicsWrapper::ProcessingDone(int i)
77
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    59
    {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    60
    m_pythonCallBack( i );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    61
    }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    62
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    63
extern "C"
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    64
    {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    65
    SYBORG_GRAPHICSWRAPPER_API SyborgGraphicsWrapper* create_SyborgGraphicsWrapper()
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    66
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    67
        return new SyborgGraphicsWrapper();
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    68
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    69
    SYBORG_GRAPHICSWRAPPER_API int initialize_SyborgGraphicsWrapper( SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    70
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    71
        Psu::platform_create_semaphore(m_outputBufferSemaphore, 1, 1);
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    72
        // Change to proper error handling
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    73
        return 0;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    74
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    75
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    76
    SYBORG_GRAPHICSWRAPPER_API int set_GraphicsCallBack( SyborgGraphicsWrapper* aSyborgGraphicsWrapper, int (*aGraphicsCallBack) (int) )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    77
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    78
        m_pythonCallBack = aGraphicsCallBack;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    79
        // Change to proper error handling
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    80
        return 0;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    81
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    82
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    83
    SYBORG_GRAPHICSWRAPPER_API int reset_SyborgGraphicsWrapper(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t *aGraphicsMemBase,  uint32_t *aCommandMemBase )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    84
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    85
        return aSyborgGraphicsWrapper->Reset( aGraphicsMemBase, aCommandMemBase );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    86
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    87
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    88
    SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferTail(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    89
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    90
        return m_wrapper->InputBufferTail();
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    91
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    92
    SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferHead(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    93
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    94
        return m_wrapper->InputBufferHead( );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    95
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    96
    SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferReadCount(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    97
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    98
        return m_wrapper->InputBufferReadCount( );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
    99
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   100
    SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputBufferWriteCount(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   101
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   102
        return m_wrapper->InputBufferWriteCount( );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   103
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   104
    SYBORG_GRAPHICSWRAPPER_API uint32_t get_InputMaxTailIndex(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   105
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   106
        return m_wrapper->InputMaxTailIndex( );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   107
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   108
    SYBORG_GRAPHICSWRAPPER_API uint32_t get_cmd_memsize( void )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   109
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   110
        return (VVI_PARAMETERS_INPUT_MEMORY_SIZE +
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   111
                VVI_PARAMETERS_OUTPUT_MEMORY_SIZE);
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   112
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   113
    SYBORG_GRAPHICSWRAPPER_API uint32_t get_framebuffer_memsize( void )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   114
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   115
        return VVI_FRAMEBUFFER_MEMORY_SIZE;
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   116
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   117
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   118
    
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   119
    SYBORG_GRAPHICSWRAPPER_API unsigned int execute_command(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   120
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   121
        return m_wrapper->Execute( );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   122
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   123
    SYBORG_GRAPHICSWRAPPER_API void set_InputBufferTail(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   124
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   125
        m_wrapper->SetInputBufferTail( aVal );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   126
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   127
    SYBORG_GRAPHICSWRAPPER_API void set_InputBufferHead(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   128
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   129
        m_wrapper->SetInputBufferHead( aVal );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   130
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   131
    SYBORG_GRAPHICSWRAPPER_API void set_InputBufferReadCount(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   132
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   133
        m_wrapper->SetInputBufferReadCount( aVal );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   134
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   135
    SYBORG_GRAPHICSWRAPPER_API void set_InputBufferWriteCount(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   136
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   137
        m_wrapper->SetInputBufferWriteCount( aVal );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   138
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   139
    SYBORG_GRAPHICSWRAPPER_API void set_InputMaxTailIndex(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper, uint32_t aVal )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   140
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   141
        m_wrapper->SetInputMaxTailIndex( aVal );
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   142
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   143
    SYBORG_GRAPHICSWRAPPER_API void signal_outputbuffer_semafore(  SyborgGraphicsWrapper* aSyborgGraphicsWrapper )
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   144
        {
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   145
        #ifdef KHRONOS_API_W_MULTITHREAD
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   146
            Psu::platform_signal_semaphore(m_outputBufferSemaphore);
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   147
        #endif
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   148
        }
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   149
b3dcdc7f8f12 start graphics-phase-3
jahyvone@4FIL49437
parents:
diff changeset
   150
    }