impliment CCXEGLView for uPhone device.

This commit is contained in:
yangws 2010-09-06 10:35:24 +00:00
parent 4b372bbf2d
commit 4a52e5aaf9
10 changed files with 245 additions and 21 deletions

View File

@ -29,15 +29,16 @@ INCLUDE_TMK3=$(TO_PROJECT_ROOT)/MakeInclude/TG3_APP_Arm.TMK3 ;TOPS
;PRE_DEFINE=USE_MTAPI=1 ;使用 MTAPI 库,此时生成的 Makefile 会自动连接有关的LIB
;C、C++预定义宏可以使用多个DEFINES串也可以使用DEFINES1、DEFINES2等方式MakeFile中依据出现顺序(不是数字大小)排列
DEFINES=-D_MY_MARCO_ ;这里填入应用的自定义宏。注意ITOPS自己的所需定义会自动包含故此这里仅仅包含应用自己特有的定义即可
DEFINES=-DCCX_UNDER_UPHONE ;这里填入应用的自定义宏。注意ITOPS自己的所需定义会自动包含故此这里仅仅包含应用自己特有的定义即可
;DEFINES=-D__TG3_PURE_DLL__ ;生成的是纯动态库意思是不是TOPS应用但可以是TCOM组件
;DEFINES=-D__TCOM_SUPPORT__ ;生成的是TCOM组件注意TOPS应用也可以同时是TCOM组件
;包含路径可以使用多个INCLUDE_PATH串也可以使用INCLUDE_PATH1、INCLUDE_PATH2等方式MakeFile中依据出现顺序(不是数字大小)排列
INCLUDE_PATH= ;应用额外的包含路径。注意ITOPS自己的所有路径都会自动包含故此这里仅仅包含应用自己特有的路径即可
INCLUDE_PATH=-I../cocos2dx
INCLUDE_PATH=-I../cocos2dx/include
;连接的库文件可以使用多个LIBS串也可以使用LIBS1、LIBS2等方式MakeFile中依据出现顺序(不是数字大小)排列
LIBS=-lMyLib ;应用额外的连接库。注意ITOPS自己的所需库自动包含而且库包含路径也已经包含故此这里仅仅包含应用自己特有的库的名字即可
LIBS=-lcocos2d ;应用额外的连接库。注意ITOPS自己的所需库自动包含而且库包含路径也已经包含故此这里仅仅包含应用自己特有的库的名字即可
;强制包含文件的名字,不能使用通配符,一定要使用相对或者绝对路径
;极力要求使用相对路径,多个文件之间使用“|”分隔

View File

@ -1 +1,56 @@
this file need to run .tmk3 file to rebuild.
############################################################################
#
# Makefile for building : HelloWorld_Arm.TMK3
# Created by TMK3_V2.3, please do not modify.
#
#############################################################################
TO_PROJECT_ROOT = ../../PRJ_TG3
OUTPUT_FILENAME = libHelloWorld.so
include $(TO_PROJECT_ROOT)/MakeInclude/Makefile_Base_DynamicLib.ARM
include $(TO_PROJECT_ROOT)/MakeInclude/Makefile_TOPS_Def.ARM
DEFINES += -DCCX_UNDER_UPHONE
INCLUDE_PATH += -I. -I./Res \
-I../cocos2dx \
-I../cocos2dx/include
LIBS += -lcocos2d
OBJECTS_DIR = ./Debug-ARM
DESTDIR = $(TO_PROJECT_ROOT)/$(BIN_OUTPUT_DIR)
TARGET = $(DESTDIR)/$(OUTPUT_FILENAME)
DEL_FILE = rm -f
MKDIR = mkdir -p
first: all
OBJECTS = \
$(OBJECTS_DIR)/HelloWorldApp.o \
$(OBJECTS_DIR)/TG3AppDllEntry.o
ADD_OBJECTS +=
$(OBJECTS_DIR) :
$(MKDIR) $(OBJECTS_DIR)
$(DESTDIR) :
$(MKDIR) $(DESTDIR)
all : $(OBJECTS_DIR) $(DESTDIR) $(TARGET)
$(TARGET) : $(OBJECTS)
$(LINK) $(LINK_FLAGS) -o $(TARGET) $(SYS_OBJECTS) $(OBJECTS) $(ADD_OBJECTS) $(LIBS) $(SYS_LIBS)
clean :
-$(DEL_FILE) $(OBJECTS)
-$(DEL_FILE) $(TARGET)
$(OBJECTS_DIR)/HelloWorldApp.o : ./HelloWorldApp.cpp
$(CXX) -c $(CXX_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/HelloWorldApp.o ./HelloWorldApp.cpp
$(OBJECTS_DIR)/TG3AppDllEntry.o : ./TG3AppDllEntry.cpp
$(CXX) -c $(CXX_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/TG3AppDllEntry.o ./TG3AppDllEntry.cpp

View File

@ -233,8 +233,11 @@ void CCDirector::mainLoop(void)
glPopMatrix();
// swap buffers
if (m_pobOpenGLView)
{
m_pobOpenGLView->swapBuffers();
}
}
void CCDirector::calculateDeltaTime(void)
{

View File

@ -29,8 +29,8 @@ INCLUDE_TMK3=$(TO_PROJECT_ROOT)/MakeInclude/TG3_APP_Arm.TMK3
;PRE_DEFINE=USE_MTAPI=1 ;使用 MTAPI 库,此时生成的 Makefile 会自动连接有关的LIB
;C、C++预定义宏可以使用多个DEFINES串也可以使用DEFINES1、DEFINES2等方式MakeFile中依据出现顺序(不是数字大小)排列
DEFINES=-D_MY_MARCO_ ;这里填入应用的自定义宏。注意ITOPS自己的所需定义会自动包含故此这里仅仅包含应用自己特有的定义即可
;DEFINES=-D__TG3_PURE_DLL__ ;生成的是纯动态库意思是不是TOPS应用但可以是TCOM组件
DEFINES=-DCCX_UNDER_UPHONE ;这里填入应用的自定义宏。注意ITOPS自己的所需定义会自动包含故此这里仅仅包含应用自己特有的定义即可
DEFINES=-D__TG3_PURE_DLL__ ;生成的是纯动态库意思是不是TOPS应用但可以是TCOM组件
;DEFINES=-D__TCOM_SUPPORT__ ;生成的是TCOM组件注意TOPS应用也可以同时是TCOM组件
;包含路径可以使用多个INCLUDE_PATH串也可以使用INCLUDE_PATH1、INCLUDE_PATH2等方式MakeFile中依据出现顺序(不是数字大小)排列
@ -42,7 +42,7 @@ INCLUDE_PATH=-I$(TO_PROJECT_ROOT)/Include/ThirdParty/libpng
;连接的库文件可以使用多个LIBS串也可以使用LIBS1、LIBS2等方式MakeFile中依据出现顺序(不是数字大小)排列
;应用额外的连接库。注意ITOPS自己的所需库自动包含而且库包含路径也已经包含故此这里仅仅包含应用自己特有的库的名字即可
LIBS=
LIBS= -lTG3_EGL -lTG3_GLESv1_CM -lTG3_GLESv2 -lz -lxml2 -lpng14 -lImageToolKit
;强制包含文件的名字,不能使用通配符,一定要使用相对或者绝对路径
;极力要求使用相对路径,多个文件之间使用“|”分隔

View File

@ -12,11 +12,13 @@ OUTPUT_FILENAME = libcocos2d.so
include $(TO_PROJECT_ROOT)/MakeInclude/Makefile_Base_DynamicLib.ARM
include $(TO_PROJECT_ROOT)/MakeInclude/Makefile_TOPS_Def.ARM
DEFINES += -D_MY_MARCO_
DEFINES += -DCCX_UNDER_UPHONE \
-D__TG3_PURE_DLL__ -D_ENABLE_CHECK_POINT_
INCLUDE_PATH += -I. -I./Res \
-I./ -I./Res -I./include -I$(TO_PROJECT_ROOT)/Include/ThirdParty/libxml2 \
-I$(TO_PROJECT_ROOT)/Include/ThirdParty/iconv \
-I$(TO_PROJECT_ROOT)/Include/ThirdParty/libpng
LIBS += -lTG3_EGL -lTG3_GLESv1_CM -lTG3_GLESv2 -lz -lxml2 -lpng14 -lImageToolKit
OBJECTS_DIR = ./Debug-ARM
DESTDIR = $(TO_PROJECT_ROOT)/$(BIN_OUTPUT_DIR)
@ -34,6 +36,7 @@ OBJECTS = \
$(OBJECTS_DIR)/CCDrawingPrimitives.o \
$(OBJECTS_DIR)/CCScheduler.o \
$(OBJECTS_DIR)/cocos2d.o \
$(OBJECTS_DIR)/profile.o \
$(OBJECTS_DIR)/CCAction.o \
$(OBJECTS_DIR)/CCActionManager.o \
$(OBJECTS_DIR)/CCCameraAction.o \
@ -140,6 +143,9 @@ $(OBJECTS_DIR)/CCScheduler.o : ./CCScheduler.cpp
$(OBJECTS_DIR)/cocos2d.o : ./cocos2d.cpp
$(CXX) -c $(CXX_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/cocos2d.o ./cocos2d.cpp
$(OBJECTS_DIR)/profile.o : ./profile.cpp
$(CXX) -c $(CXX_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/profile.o ./profile.cpp
$(OBJECTS_DIR)/CCAction.o : ./actions/CCAction.cpp
$(CXX) -c $(CXX_FLAGS) $(INCLUDE_PATH) $(LAST_INCLUDE_PATH) -o $(OBJECTS_DIR)/CCAction.o ./actions/CCAction.cpp

View File

@ -26,6 +26,8 @@ THE SOFTWARE.
#include <math.h>
using namespace std;
namespace cocos2d {
CGAffineTransform __CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty)

View File

@ -945,6 +945,18 @@
</File>
</Filter>
</Filter>
<Filter
Name="makefile"
>
<File
RelativePath=".\Lib_Cocos2d_Arm_Uphone.TMK3"
>
</File>
<File
RelativePath=".\Makefile.ARM"
>
</File>
</Filter>
<File
RelativePath=".\CCamera.cpp"
>

View File

@ -33,14 +33,13 @@ struct CGAffineTransform {
CGFloat tx, ty;
};
inline CGAffineTransform __CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty);
CGAffineTransform __CGAffineTransformMake(CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty);
#define CGAffineTransformMake __CGAffineTransformMake
inline CGPoint __CGPointApplyAffineTransform(CGPoint point, CGAffineTransform t);
CGPoint __CGPointApplyAffineTransform(CGPoint point, CGAffineTransform t);
#define CGPointApplyAffineTransform __CGPointApplyAffineTransform
inline CGSize __CGSizeApplyAffineTransform(CGSize size, CGAffineTransform t);
CGSize __CGSizeApplyAffineTransform(CGSize size, CGAffineTransform t);
#define CGSizeApplyAffineTransform __CGSizeApplyAffineTransform
CGAffineTransform CGAffineTransformMakeIdentity();

View File

@ -22,8 +22,22 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
// pre configure
#ifdef _TRANZDA_VM_ // under uphone emulator
#define CCX_PLATFORM_UPHONE
#else
#error "no platform flag defined!!"
// #error "no platform macro defined!"
#endif
// user configure
#if ! defined(CCX_PLATFORM_UPHONE) && defined(CCX_UNDER_UPHONE)
#define CCX_PLATFORM_UPHONE // under uphone
#endif
// post configure
#if ! defined(CCX_PLATFORM_UPHONE)
#error "no platform macro defined!"
#endif

View File

@ -22,9 +22,11 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
// #define USE_EGL_UMU
#ifdef _TRANZDA_VM_
#ifndef USE_EGL_UMU
// #define USE_EMU_TG3_EGL_LIB
#ifndef USE_EMU_TG3_EGL_LIB
// #define _EGL_SHOW_
#include <windows.h>
#endif
@ -32,6 +34,13 @@ THE SOFTWARE.
#include "TDC.h"
#undef GetNextWindow // this micro defined in winuser.h
#else // _TRANZDA_VM_
#include "TG3.h"
#endif // _TRANZDA_VM_
#include "TApplication.h"
#include "EGL/egl.h"
@ -43,7 +52,7 @@ THE SOFTWARE.
#include "CCTouch.h"
#include "CCTouchDispatcher.h"
#ifndef USE_EGL_UMU
#if ! defined(USE_EMU_TG3_EGL_LIB) && defined(_TRANZDA_VM_)
#define WIN_CLASS_NAME "OpenGL"
static bool s_keys[256]; // Array Used For The Keyboard Routine
@ -51,11 +60,13 @@ static bool s_active=TRUE; // Window Active Flag Set To TRUE By Def
EGLNativeWindowType _CreateWnd(int width, int height);
LRESULT CALLBACK _WndProc(HWND, UINT, WPARAM, LPARAM);
#endif
#endif // USE_EMU_TG3_EGL_LIB
namespace cocos2d {
#ifdef _TRANZDA_VM_
// impliment for uPhone emulator
class CCXEGL
{
public:
@ -66,7 +77,15 @@ public:
eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglTerminate(m_eglDisplay);
}
#ifndef USE_EGL_UMU
if (EGL_NO_CONTEXT != m_eglContext)
{
eglDestroyContext(m_eglDisplay, m_eglContext);
}
if (EGL_NO_SURFACE != m_eglSurface)
{
eglDestroySurface(m_eglDisplay, m_eglSurface);
}
#ifndef USE_EMU_TG3_EGL_LIB
if (m_eglDC)
{
ReleaseDC( (HWND)m_eglWnd, (HDC)m_eglDC);
@ -94,7 +113,7 @@ public:
TRectangle rc;
pWindow->GetClientBounds(&rc);
CCX_BREAK_IF(! (pEGL->m_pBmp = TBitmap::Create(rc.Width(), rc.Height(), 32)));
#ifdef USE_EGL_UMU
#ifdef USE_EMU_TG3_EGL_LIB
pEGL->m_eglWnd = pWindow;
TDC dc(pWindow);
pEGL->m_eglDC = &dc;
@ -239,6 +258,119 @@ private:
EGLSurface m_eglSurface;
EGLContext m_eglContext;
};
#else // _TRANZDA_VM_
// impliment for uPhone device
class CCXEGL
{
public:
~CCXEGL()
{
if (EGL_NO_DISPLAY != m_eglDisplay)
{
eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglTerminate(m_eglDisplay);
}
if (EGL_NO_CONTEXT != m_eglContext)
{
eglDestroyContext(m_eglDisplay, m_eglContext);
}
if (EGL_NO_SURFACE != m_eglSurface)
{
eglDestroySurface(m_eglDisplay, m_eglSurface);
}
}
static CCXEGL * create(TWindow * pWindow)
{
CCXEGL * pEGL = new CCXEGL;
Boolean bSuccess = FALSE;
do
{
CCX_BREAK_IF(! pEGL);
TRectangle rc;
pWindow->GetClientBounds(&rc);
pEGL->m_eglWnd = pWindow;
EGLDisplay eglDisplay;
CCX_BREAK_IF(EGL_NO_DISPLAY == (eglDisplay = eglGetDisplay(pEGL->m_eglDC)));
EGLint nMajor, nMinor;
CCX_BREAK_IF(EGL_FALSE == eglInitialize(eglDisplay, &nMajor, &nMinor) || 1 != nMajor);
const EGLint aConfigAttribs[] =
{
EGL_LEVEL, 0,
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_NATIVE_RENDERABLE, EGL_FALSE,
EGL_DEPTH_SIZE, EGL_DONT_CARE,
EGL_NONE,
};
EGLint iConfigs;
EGLConfig eglConfig;
CCX_BREAK_IF(EGL_FALSE == eglChooseConfig(eglDisplay, aConfigAttribs, &eglConfig, 1, &iConfigs)
|| (iConfigs != 1));
EGLSurface eglSurface;
eglSurface = eglCreateWindowSurface(eglDisplay, eglConfig, pEGL->m_eglWnd, NULL);
CCX_BREAK_IF(EGL_NO_SURFACE == eglSurface);
EGLContext eglContext;
eglContext = eglCreateContext(eglDisplay, eglConfig, NULL, NULL);
CCX_BREAK_IF(EGL_NO_CONTEXT == eglContext);
CCX_BREAK_IF(EGL_FALSE == eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext));
pEGL->m_eglDisplay = eglDisplay;
pEGL->m_eglSurface = eglSurface;
pEGL->m_eglConfig = eglConfig;
pEGL->m_eglContext = eglContext;
bSuccess = TRUE;
} while (0);
if (! bSuccess)
{
CCX_SAFE_DELETE(pEGL);
}
return pEGL;
}
void resizeSurface()
{
// do nothing on uPhone device, because of TWindow can't change size
}
void swapBuffers()
{
if (EGL_NO_DISPLAY != m_eglDisplay)
{
eglSwapBuffers(m_eglDisplay, m_eglSurface);
}
}
private:
CCXEGL()
: m_eglWnd(NULL)
, m_eglDC(EGL_DEFAULT_DISPLAY)
, m_eglDisplay(EGL_NO_DISPLAY)
, m_eglConfig(0)
, m_eglSurface(EGL_NO_SURFACE)
, m_eglContext(EGL_NO_CONTEXT)
{}
EGLNativeWindowType m_eglWnd;
EGLNativeDisplayType m_eglDC;
EGLDisplay m_eglDisplay;
EGLConfig m_eglConfig;
EGLSurface m_eglSurface;
EGLContext m_eglContext;
};
#endif // _TRANZDA_VM_
CCXEGLView::CCXEGLView(TApplication * pApp)
: TWindow(pApp)
, m_bCaptured(false)
@ -385,7 +517,7 @@ void CCXEGLView::swapBuffers()
//////////////////////////////////////////////////////////////////////////
// static function
//////////////////////////////////////////////////////////////////////////
#ifndef USE_EGL_UMU
#if defined(_TRANZDA_VM_) && ! defined(USE_EMU_TG3_EGL_LIB)
static EGLNativeWindowType _CreateWnd(int width, int height)
{
WNDCLASS wc; // Windows Class Structure