* upate genesis-3d engine to version 1.3.1.

match the genesis editor version 1.3.1.921.
This commit is contained in:
zhongdaohuan 2014-06-19 16:21:15 +08:00
parent 1b34d8d839
commit ad5cd7b16a
234 changed files with 5746 additions and 1278 deletions

View File

@ -1,8 +1,8 @@
[webjet] [webjet]
assetname="asdasd" assetname="asdasd"
scenename="asset:test_shader.scene" scenename="asset:editorBox3.scene"
gamedir="/test_shader" gamedir="/editorBox3"
packagename="com.genesis" packagename="com.genesis"
remotepath="" remotepath=""
usePrecompilerShader="true" usePrecompilerShader="false"

View File

@ -30,11 +30,13 @@ import org.genesis.lib.GenesisHelperListener;
import com.genesis.R; import com.genesis.R;
import android.app.Activity; import android.app.Activity;
import android.graphics.Rect;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.PaintDrawable; import android.graphics.drawable.PaintDrawable;
import android.os.Bundle; import android.os.Bundle;
import android.os.Message; import android.os.Message;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.FrameLayout; import android.widget.FrameLayout;
public abstract class GenesisActivity extends Activity implements GenesisHelperListener { public abstract class GenesisActivity extends Activity implements GenesisHelperListener {
@ -44,6 +46,7 @@ public abstract class GenesisActivity extends Activity implements GenesisHelperL
private static final String TAG = GenesisActivity.class.getSimpleName(); private static final String TAG = GenesisActivity.class.getSimpleName();
// =========================================================== // ===========================================================
private GenesisGLSurfaceView mGLSurefaceView; private GenesisGLSurfaceView mGLSurefaceView;
private int s_topPos;
public GenesisGLSurfaceView GetSurfaceView() public GenesisGLSurfaceView GetSurfaceView()
{ {
@ -121,15 +124,89 @@ public abstract class GenesisActivity extends Activity implements GenesisHelperL
FrameLayout framelayout = new FrameLayout(this); FrameLayout framelayout = new FrameLayout(this);
framelayout.setLayoutParams(framelayout_params); framelayout.setLayoutParams(framelayout_params);
// Cocos2dxGLSurfaceView // Cocos2dxGLSurfaceView
this.mGLSurefaceView = new GenesisGLSurfaceView(this); this.mGLSurefaceView = new GenesisGLSurfaceView(this);
// ...add to FrameLayout
framelayout.addView(mGLSurefaceView); framelayout.addView(mGLSurefaceView);
//edittext view
// Cocos2dxEditText layout
FrameLayout.LayoutParams edittext_layout_params =
new FrameLayout.LayoutParams(FrameLayout.LayoutParams.FILL_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
final GenesisEditText edittext = new GenesisEditText(this);
edittext.setLayoutParams(edittext_layout_params);
framelayout.addView(edittext);
mGLSurefaceView.setBackgroundResource(R.drawable.load); mGLSurefaceView.setBackgroundResource(R.drawable.load);
mGLSurefaceView.setGenesisRenderer(new GenesisRenderer(this)); mGLSurefaceView.setGenesisRenderer(new GenesisRenderer(this));
this.mGLSurefaceView.setGenesisEditText(edittext);
//!-- keyboardheight
final FrameLayout fframelayout = framelayout;
fframelayout.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
Rect r = new Rect();
edittext.getWindowVisibleDisplayFrame(r);
int screenHeight = edittext.getRootView().getHeight();
int screenWidth = edittext.getRootView().getWidth();
int heightDifference = screenHeight - (r.bottom - r.top);
boolean visible = heightDifference > screenHeight / 3;
//set edittext postion
int editBottom = edittext.getBottom();
int editHeight = edittext.getHeight();
//((EditText) edittext).setBottom(heightDifference);
boolean keyboardVisible = false;
int topPos = screenHeight;
if(r.bottom < screenHeight)
{
keyboardVisible = true;
topPos = r.bottom - editHeight ;
}
if(s_topPos == topPos)
{
return;
}
s_topPos = topPos;
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) edittext.getLayoutParams();
params.leftMargin = 0;
params.topMargin = topPos;
params.width = screenWidth;
params.height = editHeight;
// params.rightMargin = screenWidth;
// params.bottomMargin = heightDifference;
edittext.setLayoutParams(params);
if(keyboardVisible)
{
FrameLayout flayout = (FrameLayout) edittext.getParent();
flayout.removeView(edittext);
flayout.addView(edittext);
edittext.setFocusable(true);
edittext.setFocusableInTouchMode(true);
edittext.requestFocus();
}
//edittext.getParent().bringChildToFront(edittext);
}
});
// Set framelayout as the content view // Set framelayout as the content view
setContentView(framelayout); setContentView(framelayout);
} }

View File

@ -0,0 +1,90 @@
/****************************************************************************
Copyright (c) 2006, Radon Labs GmbH
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
package org.genesis.lib;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.EditText;
public class GenesisEditText extends EditText {
// ===========================================================
// Constants
// ===========================================================
// ===========================================================
// Fields
// ===========================================================
private GenesisGLSurfaceView mGenesisGLSurfaceView;
// ===========================================================
// Constructors
// ===========================================================
public GenesisEditText(final Context context) {
super(context);
}
public GenesisEditText(final Context context, final AttributeSet attrs) {
super(context, attrs);
}
public GenesisEditText(final Context context, final AttributeSet attrs, final int defStyle) {
super(context, attrs, defStyle);
}
// ===========================================================
// Getter & Setter
// ===========================================================
public void setGenesisGLSurfaceView(final GenesisGLSurfaceView pGenesisGLSurfaceView) {
this.mGenesisGLSurfaceView = pGenesisGLSurfaceView;
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) {
super.onKeyDown(pKeyCode, pKeyEvent);
/* Let GlSurfaceView get focus if back key is input. */
if (pKeyCode == KeyEvent.KEYCODE_BACK) {
this.mGenesisGLSurfaceView.requestFocus();
}
return true;
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}

View File

@ -58,6 +58,7 @@ public class GenesisGLSurfaceView extends GLSurfaceView {
private static Handler sHandler; private static Handler sHandler;
private GenesisActivity mActivity; private GenesisActivity mActivity;
private static GenesisGLSurfaceView mGenesisGLSurfaceView; private static GenesisGLSurfaceView mGenesisGLSurfaceView;
private static GenesisTextInputWraper sGenesisTextInputWraper;
private String gamedir; private String gamedir;
private String scenename; private String scenename;
@ -69,10 +70,23 @@ public class GenesisGLSurfaceView extends GLSurfaceView {
private boolean usePrecompilerShader; private boolean usePrecompilerShader;
private GenesisRenderer mGenesisRenderer; private GenesisRenderer mGenesisRenderer;
private GenesisEditText mGenesisEditText;
private ContextFactory mContextFactory; private ContextFactory mContextFactory;
private AssetManager mMgr; private AssetManager mMgr;
//get set methods=====================================================================================
public GenesisEditText getGenesisEditText() {
return this.mGenesisEditText;
}
public void setGenesisEditText(final GenesisEditText pGenesisEditText) {
this.mGenesisEditText = pGenesisEditText;
if (null != this.mGenesisEditText && null != GenesisGLSurfaceView.sGenesisTextInputWraper) {
this.mGenesisEditText.setOnEditorActionListener(GenesisGLSurfaceView.sGenesisTextInputWraper);
this.mGenesisEditText.setGenesisGLSurfaceView(this);
this.requestFocus();
}
}
private void GetStorageType(final Context context) private void GetStorageType(final Context context)
{ {
String sgamedir = gamedir; String sgamedir = gamedir;
@ -135,6 +149,7 @@ public class GenesisGLSurfaceView extends GLSurfaceView {
return availableSize/(1024*1024); return availableSize/(1024*1024);
} }
private void copyAllResFiles(final Context context,String Data,String Dest) private void copyAllResFiles(final Context context,String Data,String Dest)
{ {
Log.d( "copy", "copy start"); Log.d( "copy", "copy start");
@ -430,17 +445,40 @@ public class GenesisGLSurfaceView extends GLSurfaceView {
this.setFocusableInTouchMode(true); this.setFocusableInTouchMode(true);
GenesisGLSurfaceView.mGenesisGLSurfaceView = this; GenesisGLSurfaceView.mGenesisGLSurfaceView = this;
GenesisGLSurfaceView.sGenesisTextInputWraper = new GenesisTextInputWraper(this);
GenesisGLSurfaceView.sHandler = new Handler() { GenesisGLSurfaceView.sHandler = new Handler() {
@Override @Override
public void handleMessage(final Message msg) { public void handleMessage(final Message msg) {
switch (msg.what) { switch (msg.what) {
case HANDLER_OPEN_IME_KEYBOARD: case HANDLER_OPEN_IME_KEYBOARD:
{
if (null != GenesisGLSurfaceView.this.mGenesisEditText && GenesisGLSurfaceView.this.mGenesisEditText.requestFocus()) {
GenesisGLSurfaceView.this.mGenesisEditText.removeTextChangedListener(GenesisGLSurfaceView.sGenesisTextInputWraper);
GenesisGLSurfaceView.this.mGenesisEditText.setText("");
final String text = (String) msg.obj;
GenesisGLSurfaceView.this.mGenesisEditText.append(text);
GenesisGLSurfaceView.sGenesisTextInputWraper.setOriginText(text);
GenesisGLSurfaceView.this.mGenesisEditText.addTextChangedListener(GenesisGLSurfaceView.sGenesisTextInputWraper);
final InputMethodManager imm = (InputMethodManager) GenesisGLSurfaceView.mGenesisGLSurfaceView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(GenesisGLSurfaceView.this.mGenesisEditText, 0);
Log.d("GLSurfaceView", "showSoftInput");
}
}
break; break;
case HANDLER_CLOSE_IME_KEYBOARD: case HANDLER_CLOSE_IME_KEYBOARD:
{
if (null != GenesisGLSurfaceView.this.mGenesisEditText) {
GenesisGLSurfaceView.this.mGenesisEditText.removeTextChangedListener(GenesisGLSurfaceView.sGenesisTextInputWraper);
final InputMethodManager imm = (InputMethodManager) GenesisGLSurfaceView.mGenesisGLSurfaceView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(GenesisGLSurfaceView.this.mGenesisEditText.getWindowToken(), 0);
GenesisGLSurfaceView.this.requestFocus();
Log.d("GLSurfaceView", "HideSoftInput");
}
}
break; break;
} }
} }
@ -545,7 +583,7 @@ public class GenesisGLSurfaceView extends GLSurfaceView {
} }
/* /*
* This function is called before Cocos2dxRenderer.nativeInit(), so the * This function is called before GenesisRenderer.nativeInit(), so the
* width and height is correct. * width and height is correct.
*/ */
@Override @Override
@ -794,5 +832,34 @@ public class GenesisGLSurfaceView extends GLSurfaceView {
private int[] mValue = new int[1]; private int[] mValue = new int[1];
} }
// called by c++==========================================================================
public static void openIMEKeyboard() {
final Message msg = new Message();
msg.what = GenesisGLSurfaceView.HANDLER_OPEN_IME_KEYBOARD;
msg.obj = GenesisGLSurfaceView.mGenesisGLSurfaceView.mGenesisRenderer.getContentText();
GenesisGLSurfaceView.sHandler.sendMessage(msg);
}
public static void closeIMEKeyboard() {
final Message msg = new Message();
msg.what = GenesisGLSurfaceView.HANDLER_CLOSE_IME_KEYBOARD;
GenesisGLSurfaceView.sHandler.sendMessage(msg);
}
//text input methods===================================================================================
public void insertText(final String pText) {
this.queueEvent(new Runnable() {
@Override
public void run() {
GenesisGLSurfaceView.this.mGenesisRenderer.handleInsertText(pText);
}
});
}
public void deleteBackward() {
this.queueEvent(new Runnable() {
@Override
public void run() {
GenesisGLSurfaceView.this.mGenesisRenderer.handleDeleteBackward();
}
});
}
} }

View File

@ -0,0 +1,193 @@
/****************************************************************************
Copyright (c) 2006, Radon Labs GmbH
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
package org.genesis.lib;
import android.content.Context;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.TextView;
import android.widget.TextView.OnEditorActionListener;
public class GenesisTextInputWraper implements TextWatcher, OnEditorActionListener {
// ===========================================================
// Constants
// ===========================================================
private static final String TAG = GenesisTextInputWraper.class.getSimpleName();
// ===========================================================
// Fields
// ===========================================================
private final GenesisGLSurfaceView mGenesisGLSurfaceView;
private String mText;
private String mOriginText;
private int mCurrentInputPos;
private int mCountChar;
// ===========================================================
// Constructors
// ===========================================================
public GenesisTextInputWraper(final GenesisGLSurfaceView pGenesisGLSurfaceView) {
this.mGenesisGLSurfaceView = pGenesisGLSurfaceView;
}
// ===========================================================
// Getter & Setter
// ===========================================================
private boolean isFullScreenEdit() {
final TextView textField = this.mGenesisGLSurfaceView.getGenesisEditText();
final InputMethodManager imm = (InputMethodManager) textField.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
return imm.isFullscreenMode();
}
public void setOriginText(final String pOriginText) {
this.mOriginText = pOriginText;
}
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public void afterTextChanged(final Editable s) {
if (this.isFullScreenEdit()) {
return;
}
if(this.mCountChar > 0) {
int start = this.mCurrentInputPos;
int end = start + this.mCountChar;
final String insertText = s.subSequence(start,end).toString();
if(insertText.equals("\n"))
{
String trueStr = s.subSequence(0,start).toString() +
s.subSequence(end,s.length()).toString();
this.mGenesisGLSurfaceView.insertText( trueStr );
}
}
return;
// int nModified = s.length() - this.mText.length();
// if (nModified < 0)
// {
// for (; nModified < 0; ++nModified) {
// this.mGenesisGLSurfaceView.deleteBackward();
// /*
// if (BuildConfig.DEBUG) {
// Log.d(TAG, "deleteBackward");
// }
// */
// }
// }
// else if(this.mCountChar > 0) {
// int start = this.mCurrentInputPos;
// int end = start + this.mCountChar;
// final String insertText = s.subSequence(start,end).toString();
// this.mGenesisGLSurfaceView.insertText(insertText);
//
// //move cursor
// /*
// if (BuildConfig.DEBUG) {
// Log.d(TAG, "insertText(" + insertText + ")");
// }
// */
// }
// this.mText = s.toString();
}
@Override
public void beforeTextChanged(final CharSequence pCharSequence, final int start, final int count, final int after) {
/*
if (BuildConfig.DEBUG) {
Log.d(TAG, "beforeTextChanged(" + pCharSequence + ")start: " + start + ",count: " + count + ",after: " + after);
}
*/
this.mText = pCharSequence.toString();
this.mCurrentInputPos = start;
}
@Override
public void onTextChanged(final CharSequence pCharSequence, final int start, final int before, final int count) {
this.mCountChar = count;
}
@Override
public boolean onEditorAction(final TextView pTextView, final int pActionID, final KeyEvent pKeyEvent) {
if (this.mGenesisGLSurfaceView.getGenesisEditText() == pTextView && this.isFullScreenEdit()) {
// user press the action button, delete all old text and insert new text
for (int i = this.mOriginText.length(); i > 0; i--) {
this.mGenesisGLSurfaceView.deleteBackward();
/*
if (BuildConfig.DEBUG) {
Log.d(TAG, "deleteBackward");
}
*/
}
String text = pTextView.getText().toString();
/* If user input nothing, translate "\n" to engine. */
if (text.compareTo("") == 0) {
text = "\n";
}
if ('\n' != text.charAt(text.length() - 1)) {
text += '\n';
}
final String insertText = text;
this.mGenesisGLSurfaceView.insertText(insertText);
/*
if (BuildConfig.DEBUG) {
Log.d(TAG, "insertText(" + insertText + ")");
}
*/
}
if (pActionID == EditorInfo.IME_ACTION_DONE) {
this.mGenesisGLSurfaceView.requestFocus();
}
return false;
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}

View File

@ -24,7 +24,7 @@
@rem 根据本机cmake的安装路径修改cmakeExe变量 @rem 根据本机cmake的安装路径修改cmakeExe变量
set cmakeExe="D:\Program Files\cmake-2.8.8-win32-x86\bin\cmake.exe" set cmakeExe="D:\Program Files\CMake 2.8\bin\cmake.exe"
set curPath=%cd% set curPath=%cd%

View File

@ -7,6 +7,8 @@
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
587F8B4218FB8FB4007563A8 /* OCAndCPlusInterface.mm in Sources */ = {isa = PBXBuildFile; fileRef = 587F8B3F18FB8FB4007563A8 /* OCAndCPlusInterface.mm */; };
587F8B4318FB8FB4007563A8 /* TextViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 587F8B4118FB8FB4007563A8 /* TextViewController.mm */; };
F54D9A4418580A9D0007115E /* libGenesisEngineLib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F54D9A3318580A840007115E /* libGenesisEngineLib.a */; }; F54D9A4418580A9D0007115E /* libGenesisEngineLib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F54D9A3318580A840007115E /* libGenesisEngineLib.a */; };
F560C2F018111C0700487A7D /* ViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = F560C2EC18111C0700487A7D /* ViewController_iPad.xib */; }; F560C2F018111C0700487A7D /* ViewController_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = F560C2EC18111C0700487A7D /* ViewController_iPad.xib */; };
F560C2F118111C0700487A7D /* ViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = F560C2EE18111C0700487A7D /* ViewController_iPhone.xib */; }; F560C2F118111C0700487A7D /* ViewController_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = F560C2EE18111C0700487A7D /* ViewController_iPhone.xib */; };
@ -180,6 +182,9 @@
/* End PBXContainerItemProxy section */ /* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
587F8B3F18FB8FB4007563A8 /* OCAndCPlusInterface.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OCAndCPlusInterface.mm; sourceTree = "<group>"; };
587F8B4018FB8FB4007563A8 /* TextViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextViewController.h; sourceTree = "<group>"; };
587F8B4118FB8FB4007563A8 /* TextViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TextViewController.mm; sourceTree = "<group>"; };
F54D9A2C18580A810007115E /* GenesisEngineLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = GenesisEngineLib.xcodeproj; path = ../GenesisEngineLib/GenesisEngineLib.xcodeproj; sourceTree = "<group>"; }; F54D9A2C18580A810007115E /* GenesisEngineLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = GenesisEngineLib.xcodeproj; path = ../GenesisEngineLib/GenesisEngineLib.xcodeproj; sourceTree = "<group>"; };
F560C2ED18111C0700487A7D /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/ViewController_iPad.xib; sourceTree = "<group>"; }; F560C2ED18111C0700487A7D /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/ViewController_iPad.xib; sourceTree = "<group>"; };
F560C2EF18111C0700487A7D /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/ViewController_iPhone.xib; sourceTree = "<group>"; }; F560C2EF18111C0700487A7D /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/ViewController_iPhone.xib; sourceTree = "<group>"; };
@ -302,6 +307,9 @@
F5BC88A417F2959300F0D1DD /* IOSFramework */ = { F5BC88A417F2959300F0D1DD /* IOSFramework */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
587F8B3F18FB8FB4007563A8 /* OCAndCPlusInterface.mm */,
587F8B4018FB8FB4007563A8 /* TextViewController.h */,
587F8B4118FB8FB4007563A8 /* TextViewController.mm */,
F560C2EC18111C0700487A7D /* ViewController_iPad.xib */, F560C2EC18111C0700487A7D /* ViewController_iPad.xib */,
F560C2EE18111C0700487A7D /* ViewController_iPhone.xib */, F560C2EE18111C0700487A7D /* ViewController_iPhone.xib */,
F5BC88A517F2959300F0D1DD /* AppDelegate.h */, F5BC88A517F2959300F0D1DD /* AppDelegate.h */,
@ -716,6 +724,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
F5EFE6C618BC444F00D585CC /* Mono.Security.dll in Sources */, F5EFE6C618BC444F00D585CC /* Mono.Security.dll in Sources */,
587F8B4318FB8FB4007563A8 /* TextViewController.mm in Sources */,
F5EFE6C718BC444F00D585CC /* mscorlib.dll in Sources */, F5EFE6C718BC444F00D585CC /* mscorlib.dll in Sources */,
F5EFE6C818BC444F00D585CC /* ScriptFrameworkLibrary.dll in Sources */, F5EFE6C818BC444F00D585CC /* ScriptFrameworkLibrary.dll in Sources */,
F5EFE6C918BC444F00D585CC /* ScriptGUILibrary.dll in Sources */, F5EFE6C918BC444F00D585CC /* ScriptGUILibrary.dll in Sources */,
@ -724,6 +733,7 @@
F5EFE6CC18BC444F00D585CC /* System.dll in Sources */, F5EFE6CC18BC444F00D585CC /* System.dll in Sources */,
F5EFE6CD18BC444F00D585CC /* System.Security.dll in Sources */, F5EFE6CD18BC444F00D585CC /* System.Security.dll in Sources */,
F5EFE6CE18BC444F00D585CC /* System.Xml.dll in Sources */, F5EFE6CE18BC444F00D585CC /* System.Xml.dll in Sources */,
587F8B4218FB8FB4007563A8 /* OCAndCPlusInterface.mm in Sources */,
F5EFE6CF18BC444F00D585CC /* UserDefCSharp.dll in Sources */, F5EFE6CF18BC444F00D585CC /* UserDefCSharp.dll in Sources */,
F5BC88B617F2959400F0D1DD /* AppDelegate.mm in Sources */, F5BC88B617F2959400F0D1DD /* AppDelegate.mm in Sources */,
F5BC88BE17F2959400F0D1DD /* main.mm in Sources */, F5BC88BE17F2959400F0D1DD /* main.mm in Sources */,

View File

@ -7,6 +7,13 @@
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
58548DAE19061FC400BA92A0 /* script_app.cc in Sources */ = {isa = PBXBuildFile; fileRef = 58548DAC19061FC400BA92A0 /* script_app.cc */; };
82C7DF6B192222D2002CE939 /* FileData.cc in Sources */ = {isa = PBXBuildFile; fileRef = 82C7DF5D192222D2002CE939 /* FileData.cc */; };
82C7DF6C192222D2002CE939 /* FileTable.cc in Sources */ = {isa = PBXBuildFile; fileRef = 82C7DF60192222D2002CE939 /* FileTable.cc */; };
82C7DF6D192222D2002CE939 /* Package.cc in Sources */ = {isa = PBXBuildFile; fileRef = 82C7DF63192222D2002CE939 /* Package.cc */; };
82C7DF6E192222D2002CE939 /* PackageSystem.cc in Sources */ = {isa = PBXBuildFile; fileRef = 82C7DF65192222D2002CE939 /* PackageSystem.cc */; };
82C7DF6F192222D2002CE939 /* PackageTool.cc in Sources */ = {isa = PBXBuildFile; fileRef = 82C7DF67192222D2002CE939 /* PackageTool.cc */; };
82C7DF70192222D2002CE939 /* PackageUtil.cc in Sources */ = {isa = PBXBuildFile; fileRef = 82C7DF69192222D2002CE939 /* PackageUtil.cc */; };
F504B89B18BC39F800B7C723 /* SoundInterface.cc in Sources */ = {isa = PBXBuildFile; fileRef = F504B89918BC39F800B7C723 /* SoundInterface.cc */; }; F504B89B18BC39F800B7C723 /* SoundInterface.cc in Sources */ = {isa = PBXBuildFile; fileRef = F504B89918BC39F800B7C723 /* SoundInterface.cc */; };
F52905801830C2DC0081A084 /* CGTool.cc in Sources */ = {isa = PBXBuildFile; fileRef = F52905781830C2DC0081A084 /* CGTool.cc */; }; F52905801830C2DC0081A084 /* CGTool.cc in Sources */ = {isa = PBXBuildFile; fileRef = F52905781830C2DC0081A084 /* CGTool.cc */; };
F52905811830C2DC0081A084 /* D3DCompiler.cc in Sources */ = {isa = PBXBuildFile; fileRef = F529057A1830C2DC0081A084 /* D3DCompiler.cc */; }; F52905811830C2DC0081A084 /* D3DCompiler.cc in Sources */ = {isa = PBXBuildFile; fileRef = F529057A1830C2DC0081A084 /* D3DCompiler.cc */; };
@ -838,12 +845,6 @@
F5F49CEE17E1C5EE00361F45 /* spriteplayer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5F49CDD17E1C5EE00361F45 /* spriteplayer.cc */; }; F5F49CEE17E1C5EE00361F45 /* spriteplayer.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5F49CDD17E1C5EE00361F45 /* spriteplayer.cc */; };
F5F49CEF17E1C5EE00361F45 /* spriteutils.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5F49CDF17E1C5EE00361F45 /* spriteutils.cc */; }; F5F49CEF17E1C5EE00361F45 /* spriteutils.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5F49CDF17E1C5EE00361F45 /* spriteutils.cc */; };
F5F49CF017E1C5EE00361F45 /* spritevertex.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5F49CE117E1C5EE00361F45 /* spritevertex.cc */; }; F5F49CF017E1C5EE00361F45 /* spritevertex.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5F49CE117E1C5EE00361F45 /* spritevertex.cc */; };
F5FD75DD1859ACB90029DB32 /* FileData.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5FD75CF1859ACB90029DB32 /* FileData.cc */; };
F5FD75DE1859ACB90029DB32 /* FileTable.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5FD75D21859ACB90029DB32 /* FileTable.cc */; };
F5FD75DF1859ACB90029DB32 /* Package.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5FD75D41859ACB90029DB32 /* Package.cc */; };
F5FD75E01859ACB90029DB32 /* PackageSystem.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5FD75D61859ACB90029DB32 /* PackageSystem.cc */; };
F5FD75E11859ACB90029DB32 /* PackageTool.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5FD75D81859ACB90029DB32 /* PackageTool.cc */; };
F5FD75E21859ACB90029DB32 /* PackageUtil.cc in Sources */ = {isa = PBXBuildFile; fileRef = F5FD75DA1859ACB90029DB32 /* PackageUtil.cc */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */ /* Begin PBXCopyFilesBuildPhase section */
@ -859,6 +860,36 @@
/* End PBXCopyFilesBuildPhase section */ /* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
58548DAC19061FC400BA92A0 /* script_app.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = script_app.cc; sourceTree = "<group>"; };
58548DAD19061FC400BA92A0 /* script_app.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = script_app.h; sourceTree = "<group>"; };
587A3D9A18F68D15000ED13A /* OCAndCPlusInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OCAndCPlusInterface.h; sourceTree = "<group>"; };
82C7DF4C19221F92002CE939 /* cg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg.h; sourceTree = "<group>"; };
82C7DF4D19221F92002CE939 /* cgGL_profiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cgGL_profiles.h; sourceTree = "<group>"; };
82C7DF4E19221F92002CE939 /* cg_bindlocations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg_bindlocations.h; sourceTree = "<group>"; };
82C7DF4F19221F92002CE939 /* cg_datatypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg_datatypes.h; sourceTree = "<group>"; };
82C7DF5019221F92002CE939 /* cg_enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg_enums.h; sourceTree = "<group>"; };
82C7DF5119221F92002CE939 /* cg_errors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg_errors.h; sourceTree = "<group>"; };
82C7DF5219221F92002CE939 /* cg_profiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg_profiles.h; sourceTree = "<group>"; };
82C7DF5419221F92002CE939 /* glsl_optimizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glsl_optimizer.h; sourceTree = "<group>"; };
82C7DF5619221F92002CE939 /* hlsl2glsl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hlsl2glsl.h; sourceTree = "<group>"; };
82C7DF5819221F92002CE939 /* mojoshader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mojoshader.h; sourceTree = "<group>"; };
82C7DF5919221F92002CE939 /* mojoshader_parser_hlsl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mojoshader_parser_hlsl.h; sourceTree = "<group>"; };
82C7DF5A19221F92002CE939 /* mojoshader_version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mojoshader_version.h; sourceTree = "<group>"; };
82C7DF5C192222D2002CE939 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
82C7DF5D192222D2002CE939 /* FileData.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileData.cc; sourceTree = "<group>"; };
82C7DF5E192222D2002CE939 /* FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileData.h; sourceTree = "<group>"; };
82C7DF5F192222D2002CE939 /* FileFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileFormat.h; sourceTree = "<group>"; };
82C7DF60192222D2002CE939 /* FileTable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileTable.cc; sourceTree = "<group>"; };
82C7DF61192222D2002CE939 /* FileTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileTable.h; sourceTree = "<group>"; };
82C7DF62192222D2002CE939 /* PackDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PackDef.h; sourceTree = "<group>"; };
82C7DF63192222D2002CE939 /* Package.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Package.cc; sourceTree = "<group>"; };
82C7DF64192222D2002CE939 /* Package.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Package.h; sourceTree = "<group>"; };
82C7DF65192222D2002CE939 /* PackageSystem.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PackageSystem.cc; sourceTree = "<group>"; };
82C7DF66192222D2002CE939 /* PackageSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PackageSystem.h; sourceTree = "<group>"; };
82C7DF67192222D2002CE939 /* PackageTool.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PackageTool.cc; sourceTree = "<group>"; };
82C7DF68192222D2002CE939 /* PackageTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PackageTool.h; sourceTree = "<group>"; };
82C7DF69192222D2002CE939 /* PackageUtil.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PackageUtil.cc; sourceTree = "<group>"; };
82C7DF6A192222D2002CE939 /* PackageUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PackageUtil.h; sourceTree = "<group>"; };
F504B89918BC39F800B7C723 /* SoundInterface.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SoundInterface.cc; sourceTree = "<group>"; }; F504B89918BC39F800B7C723 /* SoundInterface.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SoundInterface.cc; sourceTree = "<group>"; };
F504B89A18BC39F800B7C723 /* SoundInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SoundInterface.h; sourceTree = "<group>"; }; F504B89A18BC39F800B7C723 /* SoundInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SoundInterface.h; sourceTree = "<group>"; };
F52905781830C2DC0081A084 /* CGTool.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CGTool.cc; sourceTree = "<group>"; }; F52905781830C2DC0081A084 /* CGTool.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CGTool.cc; sourceTree = "<group>"; };
@ -1583,18 +1614,6 @@
F5F48FA517E1A66000361F45 /* ShaderCompiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShaderCompiler.h; sourceTree = "<group>"; }; F5F48FA517E1A66000361F45 /* ShaderCompiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShaderCompiler.h; sourceTree = "<group>"; };
F5F48FA817E1A66000361F45 /* stdneb.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stdneb.cc; sourceTree = "<group>"; }; F5F48FA817E1A66000361F45 /* stdneb.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stdneb.cc; sourceTree = "<group>"; };
F5F48FA917E1A66000361F45 /* stdneb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stdneb.h; sourceTree = "<group>"; }; F5F48FA917E1A66000361F45 /* stdneb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stdneb.h; sourceTree = "<group>"; };
F5F48FBC17E1A66000361F45 /* cg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg.h; sourceTree = "<group>"; };
F5F48FBD17E1A66000361F45 /* cg_bindlocations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg_bindlocations.h; sourceTree = "<group>"; };
F5F48FBE17E1A66000361F45 /* cg_datatypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg_datatypes.h; sourceTree = "<group>"; };
F5F48FBF17E1A66000361F45 /* cg_enums.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg_enums.h; sourceTree = "<group>"; };
F5F48FC017E1A66000361F45 /* cg_errors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg_errors.h; sourceTree = "<group>"; };
F5F48FC117E1A66000361F45 /* cg_profiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cg_profiles.h; sourceTree = "<group>"; };
F5F48FC217E1A66000361F45 /* cgGL_profiles.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cgGL_profiles.h; sourceTree = "<group>"; };
F5F48FC417E1A66000361F45 /* glsl_optimizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = glsl_optimizer.h; sourceTree = "<group>"; };
F5F48FC617E1A66000361F45 /* hlsl2glsl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hlsl2glsl.h; sourceTree = "<group>"; };
F5F48FC817E1A66000361F45 /* mojoshader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mojoshader.h; sourceTree = "<group>"; };
F5F48FC917E1A66000361F45 /* mojoshader_parser_hlsl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mojoshader_parser_hlsl.h; sourceTree = "<group>"; };
F5F48FCA17E1A66000361F45 /* mojoshader_version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mojoshader_version.h; sourceTree = "<group>"; };
F5F48FDE17E1A66000361F45 /* aldlist.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aldlist.cc; sourceTree = "<group>"; }; F5F48FDE17E1A66000361F45 /* aldlist.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aldlist.cc; sourceTree = "<group>"; };
F5F48FDF17E1A66000361F45 /* aldlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aldlist.h; sourceTree = "<group>"; }; F5F48FDF17E1A66000361F45 /* aldlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aldlist.h; sourceTree = "<group>"; };
F5F48FE017E1A66000361F45 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; }; F5F48FE017E1A66000361F45 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
@ -2742,21 +2761,6 @@
F5F49CE017E1C5EE00361F45 /* spriteutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spriteutils.h; sourceTree = "<group>"; }; F5F49CE017E1C5EE00361F45 /* spriteutils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spriteutils.h; sourceTree = "<group>"; };
F5F49CE117E1C5EE00361F45 /* spritevertex.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spritevertex.cc; sourceTree = "<group>"; }; F5F49CE117E1C5EE00361F45 /* spritevertex.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = spritevertex.cc; sourceTree = "<group>"; };
F5F49CE217E1C5EE00361F45 /* spritevertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spritevertex.h; sourceTree = "<group>"; }; F5F49CE217E1C5EE00361F45 /* spritevertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = spritevertex.h; sourceTree = "<group>"; };
F5FD75CE1859ACB80029DB32 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
F5FD75CF1859ACB90029DB32 /* FileData.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileData.cc; sourceTree = "<group>"; };
F5FD75D01859ACB90029DB32 /* FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileData.h; sourceTree = "<group>"; };
F5FD75D11859ACB90029DB32 /* FileFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileFormat.h; sourceTree = "<group>"; };
F5FD75D21859ACB90029DB32 /* FileTable.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileTable.cc; sourceTree = "<group>"; };
F5FD75D31859ACB90029DB32 /* FileTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileTable.h; sourceTree = "<group>"; };
F5FD75D41859ACB90029DB32 /* Package.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Package.cc; sourceTree = "<group>"; };
F5FD75D51859ACB90029DB32 /* Package.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Package.h; sourceTree = "<group>"; };
F5FD75D61859ACB90029DB32 /* PackageSystem.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PackageSystem.cc; sourceTree = "<group>"; };
F5FD75D71859ACB90029DB32 /* PackageSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PackageSystem.h; sourceTree = "<group>"; };
F5FD75D81859ACB90029DB32 /* PackageTool.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PackageTool.cc; sourceTree = "<group>"; };
F5FD75D91859ACB90029DB32 /* PackageTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PackageTool.h; sourceTree = "<group>"; };
F5FD75DA1859ACB90029DB32 /* PackageUtil.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PackageUtil.cc; sourceTree = "<group>"; };
F5FD75DB1859ACB90029DB32 /* PackageUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PackageUtil.h; sourceTree = "<group>"; };
F5FD75DC1859ACB90029DB32 /* PackDef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PackDef.h; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
@ -2771,6 +2775,89 @@
/* End PBXFrameworksBuildPhase section */ /* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */ /* Begin PBXGroup section */
587A3D9918F68D15000ED13A /* OCAndCPlusPlusInterface */ = {
isa = PBXGroup;
children = (
587A3D9A18F68D15000ED13A /* OCAndCPlusInterface.h */,
);
path = OCAndCPlusPlusInterface;
sourceTree = "<group>";
};
82C7DF4A19221F92002CE939 /* win */ = {
isa = PBXGroup;
children = (
82C7DF4B19221F92002CE939 /* Cg */,
82C7DF5319221F92002CE939 /* GlslOptimizer */,
82C7DF5519221F92002CE939 /* hlsl2glslfork */,
82C7DF5719221F92002CE939 /* mojoshader */,
);
name = win;
path = ../../ExtIncludes/ShaderUtil;
sourceTree = "<group>";
};
82C7DF4B19221F92002CE939 /* Cg */ = {
isa = PBXGroup;
children = (
82C7DF4C19221F92002CE939 /* cg.h */,
82C7DF4D19221F92002CE939 /* cgGL_profiles.h */,
82C7DF4E19221F92002CE939 /* cg_bindlocations.h */,
82C7DF4F19221F92002CE939 /* cg_datatypes.h */,
82C7DF5019221F92002CE939 /* cg_enums.h */,
82C7DF5119221F92002CE939 /* cg_errors.h */,
82C7DF5219221F92002CE939 /* cg_profiles.h */,
);
path = Cg;
sourceTree = "<group>";
};
82C7DF5319221F92002CE939 /* GlslOptimizer */ = {
isa = PBXGroup;
children = (
82C7DF5419221F92002CE939 /* glsl_optimizer.h */,
);
path = GlslOptimizer;
sourceTree = "<group>";
};
82C7DF5519221F92002CE939 /* hlsl2glslfork */ = {
isa = PBXGroup;
children = (
82C7DF5619221F92002CE939 /* hlsl2glsl.h */,
);
path = hlsl2glslfork;
sourceTree = "<group>";
};
82C7DF5719221F92002CE939 /* mojoshader */ = {
isa = PBXGroup;
children = (
82C7DF5819221F92002CE939 /* mojoshader.h */,
82C7DF5919221F92002CE939 /* mojoshader_parser_hlsl.h */,
82C7DF5A19221F92002CE939 /* mojoshader_version.h */,
);
path = mojoshader;
sourceTree = "<group>";
};
82C7DF5B192222D2002CE939 /* packagetool */ = {
isa = PBXGroup;
children = (
82C7DF5C192222D2002CE939 /* CMakeLists.txt */,
82C7DF5D192222D2002CE939 /* FileData.cc */,
82C7DF5E192222D2002CE939 /* FileData.h */,
82C7DF5F192222D2002CE939 /* FileFormat.h */,
82C7DF60192222D2002CE939 /* FileTable.cc */,
82C7DF61192222D2002CE939 /* FileTable.h */,
82C7DF62192222D2002CE939 /* PackDef.h */,
82C7DF63192222D2002CE939 /* Package.cc */,
82C7DF64192222D2002CE939 /* Package.h */,
82C7DF65192222D2002CE939 /* PackageSystem.cc */,
82C7DF66192222D2002CE939 /* PackageSystem.h */,
82C7DF67192222D2002CE939 /* PackageTool.cc */,
82C7DF68192222D2002CE939 /* PackageTool.h */,
82C7DF69192222D2002CE939 /* PackageUtil.cc */,
82C7DF6A192222D2002CE939 /* PackageUtil.h */,
);
name = packagetool;
path = ../../packagetool;
sourceTree = "<group>";
};
F52905931830CA550081A084 /* ShaderTemplate */ = { F52905931830CA550081A084 /* ShaderTemplate */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -2883,6 +2970,7 @@
F5BC886217F28E0A00F0D1DD /* IOSObjectC */ = { F5BC886217F28E0A00F0D1DD /* IOSObjectC */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
587A3D9918F68D15000ED13A /* OCAndCPlusPlusInterface */,
F5BC886317F28E0A00F0D1DD /* iosALSystem */, F5BC886317F28E0A00F0D1DD /* iosALSystem */,
); );
name = IOSObjectC; name = IOSObjectC;
@ -3006,9 +3094,9 @@
F5F48B3B17E1A61300361F45 /* GenesisEngineLib */ = { F5F48B3B17E1A61300361F45 /* GenesisEngineLib */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
82C7DF5B192222D2002CE939 /* packagetool */,
F5E8AB241867EAAB006C5348 /* profilesystem */, F5E8AB241867EAAB006C5348 /* profilesystem */,
F5ECD9121862EE9900AFFB4E /* tinyxml */, F5ECD9121862EE9900AFFB4E /* tinyxml */,
F5FD75CD1859ACB80029DB32 /* packageTool */,
F5F49C0817E1B4C000361F45 /* CSharpAssembly */, F5F49C0817E1B4C000361F45 /* CSharpAssembly */,
F5F4966417E1A66400361F45 /* GenesisiOS */, F5F4966417E1A66400361F45 /* GenesisiOS */,
F5F48B5017E1A65A00361F45 /* addons */, F5F48B5017E1A65A00361F45 /* addons */,
@ -3789,6 +3877,7 @@
F5F48F9B17E1A66000361F45 /* shadercompiler */ = { F5F48F9B17E1A66000361F45 /* shadercompiler */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
82C7DF4A19221F92002CE939 /* win */,
F5C42B3518B1E3A400F5144E /* Compilers */, F5C42B3518B1E3A400F5144E /* Compilers */,
F5C42B3E18B1E3A400F5144E /* ShadercompilerConfig.cc */, F5C42B3E18B1E3A400F5144E /* ShadercompilerConfig.cc */,
F5C42B3F18B1E3A400F5144E /* ShadercompilerConfig.h */, F5C42B3F18B1E3A400F5144E /* ShadercompilerConfig.h */,
@ -3815,7 +3904,6 @@
F5F48FA817E1A66000361F45 /* stdneb.cc */, F5F48FA817E1A66000361F45 /* stdneb.cc */,
F5F48FA917E1A66000361F45 /* stdneb.h */, F5F48FA917E1A66000361F45 /* stdneb.h */,
F5F48FB117E1A66000361F45 /* Utility */, F5F48FB117E1A66000361F45 /* Utility */,
F5F48FBA17E1A66000361F45 /* win */,
); );
path = shadercompiler; path = shadercompiler;
sourceTree = "<group>"; sourceTree = "<group>";
@ -3851,57 +3939,6 @@
path = Utility; path = Utility;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
F5F48FBA17E1A66000361F45 /* win */ = {
isa = PBXGroup;
children = (
F5F48FBB17E1A66000361F45 /* Cg */,
F5F48FC317E1A66000361F45 /* GlslOptimizer */,
F5F48FC517E1A66000361F45 /* hlsl2glslfork */,
F5F48FC717E1A66000361F45 /* mojoshader */,
);
path = win;
sourceTree = "<group>";
};
F5F48FBB17E1A66000361F45 /* Cg */ = {
isa = PBXGroup;
children = (
F5F48FBC17E1A66000361F45 /* cg.h */,
F5F48FBD17E1A66000361F45 /* cg_bindlocations.h */,
F5F48FBE17E1A66000361F45 /* cg_datatypes.h */,
F5F48FBF17E1A66000361F45 /* cg_enums.h */,
F5F48FC017E1A66000361F45 /* cg_errors.h */,
F5F48FC117E1A66000361F45 /* cg_profiles.h */,
F5F48FC217E1A66000361F45 /* cgGL_profiles.h */,
);
path = Cg;
sourceTree = "<group>";
};
F5F48FC317E1A66000361F45 /* GlslOptimizer */ = {
isa = PBXGroup;
children = (
F5F48FC417E1A66000361F45 /* glsl_optimizer.h */,
);
path = GlslOptimizer;
sourceTree = "<group>";
};
F5F48FC517E1A66000361F45 /* hlsl2glslfork */ = {
isa = PBXGroup;
children = (
F5F48FC617E1A66000361F45 /* hlsl2glsl.h */,
);
path = hlsl2glslfork;
sourceTree = "<group>";
};
F5F48FC717E1A66000361F45 /* mojoshader */ = {
isa = PBXGroup;
children = (
F5F48FC817E1A66000361F45 /* mojoshader.h */,
F5F48FC917E1A66000361F45 /* mojoshader_parser_hlsl.h */,
F5F48FCA17E1A66000361F45 /* mojoshader_version.h */,
);
path = mojoshader;
sourceTree = "<group>";
};
F5F48FDD17E1A66000361F45 /* soundsystem */ = { F5F48FDD17E1A66000361F45 /* soundsystem */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -4439,6 +4476,8 @@
F5F492AE17E1A66200361F45 /* scriptfeature */ = { F5F492AE17E1A66200361F45 /* scriptfeature */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
58548DAC19061FC400BA92A0 /* script_app.cc */,
58548DAD19061FC400BA92A0 /* script_app.h */,
F5F492AF17E1A66200361F45 /* editable_field_value.cc */, F5F492AF17E1A66200361F45 /* editable_field_value.cc */,
F5F492B017E1A66200361F45 /* editable_field_value.h */, F5F492B017E1A66200361F45 /* editable_field_value.h */,
F5F492B117E1A66200361F45 /* inc */, F5F492B117E1A66200361F45 /* inc */,
@ -5992,29 +6031,6 @@
path = sprite; path = sprite;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
F5FD75CD1859ACB80029DB32 /* packageTool */ = {
isa = PBXGroup;
children = (
F5FD75CE1859ACB80029DB32 /* CMakeLists.txt */,
F5FD75CF1859ACB90029DB32 /* FileData.cc */,
F5FD75D01859ACB90029DB32 /* FileData.h */,
F5FD75D11859ACB90029DB32 /* FileFormat.h */,
F5FD75D21859ACB90029DB32 /* FileTable.cc */,
F5FD75D31859ACB90029DB32 /* FileTable.h */,
F5FD75D41859ACB90029DB32 /* Package.cc */,
F5FD75D51859ACB90029DB32 /* Package.h */,
F5FD75D61859ACB90029DB32 /* PackageSystem.cc */,
F5FD75D71859ACB90029DB32 /* PackageSystem.h */,
F5FD75D81859ACB90029DB32 /* PackageTool.cc */,
F5FD75D91859ACB90029DB32 /* PackageTool.h */,
F5FD75DA1859ACB90029DB32 /* PackageUtil.cc */,
F5FD75DB1859ACB90029DB32 /* PackageUtil.h */,
F5FD75DC1859ACB90029DB32 /* PackDef.h */,
);
name = packageTool;
path = ../../packageTool;
sourceTree = "<group>";
};
/* End PBXGroup section */ /* End PBXGroup section */
/* Begin PBXNativeTarget section */ /* Begin PBXNativeTarget section */
@ -6187,6 +6203,7 @@
F5F497C217E1A66500361F45 /* MyGUI_TabItem.cpp in Sources */, F5F497C217E1A66500361F45 /* MyGUI_TabItem.cpp in Sources */,
F5F497C317E1A66500361F45 /* MyGUI_TextBox.cpp in Sources */, F5F497C317E1A66500361F45 /* MyGUI_TextBox.cpp in Sources */,
F5F497C417E1A66500361F45 /* MyGUI_TextIterator.cpp in Sources */, F5F497C417E1A66500361F45 /* MyGUI_TextIterator.cpp in Sources */,
82C7DF6B192222D2002CE939 /* FileData.cc in Sources */,
F5F497C517E1A66500361F45 /* MyGUI_TextureUtility.cpp in Sources */, F5F497C517E1A66500361F45 /* MyGUI_TextureUtility.cpp in Sources */,
F5F497C617E1A66500361F45 /* MyGUI_TextView.cpp in Sources */, F5F497C617E1A66500361F45 /* MyGUI_TextView.cpp in Sources */,
F5F497C717E1A66500361F45 /* MyGUI_TileRect.cpp in Sources */, F5F497C717E1A66500361F45 /* MyGUI_TileRect.cpp in Sources */,
@ -6203,6 +6220,7 @@
F5F4980717E1A66500361F45 /* particleColorAffectorSerialization.cc in Sources */, F5F4980717E1A66500361F45 /* particleColorAffectorSerialization.cc in Sources */,
F5F4980A17E1A66500361F45 /* particleFollowerAffector.cc in Sources */, F5F4980A17E1A66500361F45 /* particleFollowerAffector.cc in Sources */,
F5F4980B17E1A66500361F45 /* particleFollowerAffectorSerialization.cc in Sources */, F5F4980B17E1A66500361F45 /* particleFollowerAffectorSerialization.cc in Sources */,
82C7DF6C192222D2002CE939 /* FileTable.cc in Sources */,
F5F4980C17E1A66500361F45 /* particleGravityAffector.cc in Sources */, F5F4980C17E1A66500361F45 /* particleGravityAffector.cc in Sources */,
F5F4980D17E1A66500361F45 /* particleGravityAffectorSerialization.cc in Sources */, F5F4980D17E1A66500361F45 /* particleGravityAffectorSerialization.cc in Sources */,
F5F4981017E1A66500361F45 /* particleLinearForceAffector.cc in Sources */, F5F4981017E1A66500361F45 /* particleLinearForceAffector.cc in Sources */,
@ -6504,6 +6522,7 @@
F5F49A6017E1A66500361F45 /* TerrainRenderComponent.cc in Sources */, F5F49A6017E1A66500361F45 /* TerrainRenderComponent.cc in Sources */,
F5F49A6117E1A66500361F45 /* TerrainRenderComponentSerialization.cc in Sources */, F5F49A6117E1A66500361F45 /* TerrainRenderComponentSerialization.cc in Sources */,
F5F49A6217E1A66500361F45 /* TerrainRenderObject.cc in Sources */, F5F49A6217E1A66500361F45 /* TerrainRenderObject.cc in Sources */,
82C7DF6F192222D2002CE939 /* PackageTool.cc in Sources */,
F5F49A6717E1A66500361F45 /* application.cc in Sources */, F5F49A6717E1A66500361F45 /* application.cc in Sources */,
F5F49A6917E1A66500361F45 /* androidsysfunc.cc in Sources */, F5F49A6917E1A66500361F45 /* androidsysfunc.cc in Sources */,
F5F49A6A17E1A66500361F45 /* coreserver.cc in Sources */, F5F49A6A17E1A66500361F45 /* coreserver.cc in Sources */,
@ -6561,6 +6580,7 @@
F5F49A9E17E1A66500361F45 /* archivefilesystem.cc in Sources */, F5F49A9E17E1A66500361F45 /* archivefilesystem.cc in Sources */,
F5F49A9F17E1A66500361F45 /* archivefilesystembase.cc in Sources */, F5F49A9F17E1A66500361F45 /* archivefilesystembase.cc in Sources */,
F5F49AA017E1A66500361F45 /* assignregistry.cc in Sources */, F5F49AA017E1A66500361F45 /* assignregistry.cc in Sources */,
82C7DF70192222D2002CE939 /* PackageUtil.cc in Sources */,
F5F49AA117E1A66500361F45 /* gamecontentserverbase.cc in Sources */, F5F49AA117E1A66500361F45 /* gamecontentserverbase.cc in Sources */,
F5F49AA217E1A66500361F45 /* binaryreader.cc in Sources */, F5F49AA217E1A66500361F45 /* binaryreader.cc in Sources */,
F5F49AA317E1A66500361F45 /* binarywriter.cc in Sources */, F5F49AA317E1A66500361F45 /* binarywriter.cc in Sources */,
@ -6642,6 +6662,7 @@
F5F49AFA17E1A66500361F45 /* conebuilder.cc in Sources */, F5F49AFA17E1A66500361F45 /* conebuilder.cc in Sources */,
F5F49AFB17E1A66500361F45 /* meshbuilder.cc in Sources */, F5F49AFB17E1A66500361F45 /* meshbuilder.cc in Sources */,
F5F49AFC17E1A66500361F45 /* parallelogrambuilder.cc in Sources */, F5F49AFC17E1A66500361F45 /* parallelogrambuilder.cc in Sources */,
82C7DF6E192222D2002CE939 /* PackageSystem.cc in Sources */,
F5F49AFD17E1A66500361F45 /* asyncport.cc in Sources */, F5F49AFD17E1A66500361F45 /* asyncport.cc in Sources */,
F5F49AFE17E1A66500361F45 /* asynhandlerthread.cc in Sources */, F5F49AFE17E1A66500361F45 /* asynhandlerthread.cc in Sources */,
F5F49AFF17E1A66500361F45 /* batchmessage.cc in Sources */, F5F49AFF17E1A66500361F45 /* batchmessage.cc in Sources */,
@ -6796,6 +6817,7 @@
F5F49CC217E1C55900361F45 /* vegetationfeature.cc in Sources */, F5F49CC217E1C55900361F45 /* vegetationfeature.cc in Sources */,
F5F49CC317E1C55900361F45 /* vegetationfeatureprotocol.cc in Sources */, F5F49CC317E1C55900361F45 /* vegetationfeatureprotocol.cc in Sources */,
F5F49CE317E1C5EE00361F45 /* sprite.cc in Sources */, F5F49CE317E1C5EE00361F45 /* sprite.cc in Sources */,
82C7DF6D192222D2002CE939 /* Package.cc in Sources */,
F5F49CE417E1C5EE00361F45 /* spriteanimation.cc in Sources */, F5F49CE417E1C5EE00361F45 /* spriteanimation.cc in Sources */,
F5F49CE517E1C5EE00361F45 /* spriteanimationclip.cc in Sources */, F5F49CE517E1C5EE00361F45 /* spriteanimationclip.cc in Sources */,
F5F49CE617E1C5EE00361F45 /* spriteblock.cc in Sources */, F5F49CE617E1C5EE00361F45 /* spriteblock.cc in Sources */,
@ -6838,6 +6860,7 @@
F55211611856F90B003AC44B /* Animation.cc in Sources */, F55211611856F90B003AC44B /* Animation.cc in Sources */,
F55211621856F90B003AC44B /* AnimationLayer.cc in Sources */, F55211621856F90B003AC44B /* AnimationLayer.cc in Sources */,
F55211631856F90B003AC44B /* AnimationServer.cc in Sources */, F55211631856F90B003AC44B /* AnimationServer.cc in Sources */,
58548DAE19061FC400BA92A0 /* script_app.cc in Sources */,
F55211641856F90B003AC44B /* ClipControl.cc in Sources */, F55211641856F90B003AC44B /* ClipControl.cc in Sources */,
F55211A21856FC71003AC44B /* GenesisMakeGPUProgram.cc in Sources */, F55211A21856FC71003AC44B /* GenesisMakeGPUProgram.cc in Sources */,
F55211A31856FC71003AC44B /* GenesisMakeMaterial.cc in Sources */, F55211A31856FC71003AC44B /* GenesisMakeMaterial.cc in Sources */,
@ -6876,12 +6899,6 @@
F55211FB1858015B003AC44B /* TerrainDataSource.cc in Sources */, F55211FB1858015B003AC44B /* TerrainDataSource.cc in Sources */,
F5DA5ADF185815370083349F /* ForwardShadingRenderPipeline.cc in Sources */, F5DA5ADF185815370083349F /* ForwardShadingRenderPipeline.cc in Sources */,
F5DA5AE1185826380083349F /* scriptbind_physicsshape.cc in Sources */, F5DA5AE1185826380083349F /* scriptbind_physicsshape.cc in Sources */,
F5FD75DD1859ACB90029DB32 /* FileData.cc in Sources */,
F5FD75DE1859ACB90029DB32 /* FileTable.cc in Sources */,
F5FD75DF1859ACB90029DB32 /* Package.cc in Sources */,
F5FD75E01859ACB90029DB32 /* PackageSystem.cc in Sources */,
F5FD75E11859ACB90029DB32 /* PackageTool.cc in Sources */,
F5FD75E21859ACB90029DB32 /* PackageUtil.cc in Sources */,
F5ECD9021862E8D300AFFB4E /* particleMovementAffector.cc in Sources */, F5ECD9021862E8D300AFFB4E /* particleMovementAffector.cc in Sources */,
F5ECD9061862E90400AFFB4E /* particleGPUTarget.cc in Sources */, F5ECD9061862E90400AFFB4E /* particleGPUTarget.cc in Sources */,
F5ECD9071862E90400AFFB4E /* particleGPUTargetSerialization.cc in Sources */, F5ECD9071862E90400AFFB4E /* particleGPUTargetSerialization.cc in Sources */,
@ -7028,7 +7045,7 @@
../extlibs/IosLibs, ../extlibs/IosLibs,
../graphicsystem, ../graphicsystem,
../addons, ../addons,
../addons/shadercompiler/win, ../ExtIncludes/ShaderUtil,
../addons/Utility, ../addons/Utility,
../addons/shadercompiler, ../addons/shadercompiler,
../app, ../app,
@ -7067,7 +7084,7 @@
../extlibs/IosLibs, ../extlibs/IosLibs,
../graphicsystem, ../graphicsystem,
../addons, ../addons,
../addons/shadercompiler/win, ../ExtIncludes/ShaderUtil,
../addons/Utility, ../addons/Utility,
../addons/shadercompiler, ../addons/shadercompiler,
../app, ../app,

View File

@ -26,11 +26,13 @@ THE SOFTWARE.
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
@class ViewController; @class ViewController;
@class TextViewController;
@interface AppDelegate : UIResponder <UIApplicationDelegate> @interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window; @property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) ViewController *viewController; @property (strong, nonatomic) ViewController *viewController;
@property (strong, nonatomic) TextViewController *textviewController;
@end @end

View File

@ -1,3 +1,26 @@
/****************************************************************************
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
// //
// AppDelegate.m // AppDelegate.m
// GenesisEngineIos // GenesisEngineIos
@ -8,6 +31,8 @@
#import "AppDelegate.h" #import "AppDelegate.h"
#import "ViewController.h" #import "ViewController.h"
#import "TextViewController.h"
#include "MobClick.h" #include "MobClick.h"
@implementation AppDelegate @implementation AppDelegate
@ -22,6 +47,15 @@
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil]; self.viewController = [[ViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
} }
self.window.rootViewController = self.viewController; self.window.rootViewController = self.viewController;
self.textviewController = [[TextViewController alloc]initWithNibName:nil bundle:nil ];
[self.textviewController setupTextView];
//add child textviewcontroller and subview
[self.viewController addChildViewController:self.textviewController];
[self.viewController.view addSubview:self.textviewController.view];
[self.window makeKeyAndVisible]; [self.window makeKeyAndVisible];
return YES; return YES;
} }

View File

@ -0,0 +1,47 @@
/****************************************************************************
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
//
// OCAndCPlusInterface.cpp
// GameApp
//
// Created by xuhengjin on 4/8/14.
// Copyright (c) 2014 webJet. All rights reserved.
//
#import <Foundation/Foundation.h>
//#import "EAGLView.h"
#import "TextViewController.h"
#import "../OCAndCPlusPlusInterface/OCAndCPlusInterface.h"
void OCAndCPlusInterface::showKeyboard(bool bShow,const char* contentUtf8)
{
//NSLog(@"showkeyboard11");
if (bShow) {
[TextViewController setTextViewText:contentUtf8];
}
[TextViewController showKeyboard:bShow];
}

View File

@ -0,0 +1,80 @@
/****************************************************************************
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
/*
File: TextViewController.h
Abstract: The view controller for hosting the UITextView features of this sample.
Version: 2.11
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
Inc. ("Apple") in consideration of your agreement to the following
terms, and your use, installation, modification or redistribution of
this Apple software constitutes acceptance of these terms. If you do
not agree with these terms, please do not use, install, modify or
redistribute this Apple software.
In consideration of your agreement to abide by the following terms, and
subject to these terms, Apple grants you a personal, non-exclusive
license, under Apple's copyrights in this original Apple software (the
"Apple Software"), to use, reproduce, modify and redistribute the Apple
Software, with or without modifications, in source and/or binary forms;
provided that if you redistribute the Apple Software in its entirety and
without modifications, you must retain this notice and the following
text and disclaimers in all such redistributions of the Apple Software.
Neither the name, trademarks, service marks or logos of Apple Inc. may
be used to endorse or promote products derived from the Apple Software
without specific prior written permission from Apple. Except as
expressly stated in this notice, no other rights or licenses, express or
implied, are granted by Apple herein, including but not limited to any
patent rights that may be infringed by your derivative works or by other
works in which the Apple Software may be incorporated.
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Copyright (C) 2013 Apple Inc. All Rights Reserved.
*/
#import <UIKit/UIKit.h>
@interface MyUITextView : UITextView
@end
@interface TextViewController : UIViewController<UITextViewDelegate>
+ (void) showKeyboard: (bool) bShow ;
+ (void) setTextViewText:(const char*) content;
- (void)setupTextView;
@end

View File

@ -0,0 +1,297 @@
/****************************************************************************
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
/*
File: TextViewController.m
Abstract: The view controller for hosting the UITextView features of this sample.
Version: 2.11
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
Inc. ("Apple") in consideration of your agreement to the following
terms, and your use, installation, modification or redistribution of
this Apple software constitutes acceptance of these terms. If you do
not agree with these terms, please do not use, install, modify or
redistribute this Apple software.
In consideration of your agreement to abide by the following terms, and
subject to these terms, Apple grants you a personal, non-exclusive
license, under Apple's copyrights in this original Apple software (the
"Apple Software"), to use, reproduce, modify and redistribute the Apple
Software, with or without modifications, in source and/or binary forms;
provided that if you redistribute the Apple Software in its entirety and
without modifications, you must retain this notice and the following
text and disclaimers in all such redistributions of the Apple Software.
Neither the name, trademarks, service marks or logos of Apple Inc. may
be used to endorse or promote products derived from the Apple Software
without specific prior written permission from Apple. Except as
expressly stated in this notice, no other rights or licenses, express or
implied, are granted by Apple herein, including but not limited to any
patent rights that may be infringed by your derivative works or by other
works in which the Apple Software may be incorporated.
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Copyright (C) 2013 Apple Inc. All Rights Reserved.
*/
#import "TextViewController.h"
#import "AppDelegate.h"
#import "ViewController.h"
#include "Shell/Genesis.h"
#ifdef DEBUG
CGRect g_rectPos = CGRectMake(0, -101, 300, 100);
#else
CGRect g_rectPos = CGRectMake(0, -101, 300, 100);
#endif
float g_textviewHeight = 60;
@implementation MyUITextView
@end
MyUITextView* g_textEdit;
CGSize g_sizeDevice;
int g_maxCharCount = 100;
@interface TextViewController () <UITextViewDelegate>
@property (nonatomic, strong) MyUITextView *textView;
@end
#pragma mark -
@implementation TextViewController
+ (void) showKeyboard: (bool) bShow
{
NSString* empty = @"";
if (bShow) {
g_textEdit.frame = g_rectPos;
//[g_textEdit setText:empty];
//[g_textEdit setText:@"edit"];
[g_textEdit setKeyboardType:UIKeyboardTypeDefault];
g_textEdit.hidden = FALSE;
[g_textEdit becomeFirstResponder];
} else {
[g_textEdit resignFirstResponder];
g_textEdit.hidden = TRUE;
[g_textEdit setText:empty];
}
}
+ (void) setTextViewText:(const char*) content
{
NSString* nsContent = [[NSString alloc] initWithUTF8String:content];
[g_textEdit setText:nsContent];
}
- (void)setupTextView
{
self.textView = [[UITextView alloc] initWithFrame:self.view.frame];
g_textEdit = self.textView;
self.textView.textColor = [UIColor blackColor];
self.textView.font = [UIFont fontWithName:@"Arial" size:18.0];
self.textView.delegate = self;
self.textView.backgroundColor = [UIColor whiteColor];
self.textView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
NSString *textToAdd = @"Now is the time for all good developers to come to serve their country.\n\nNow is the time for all good developers to come to serve their country.\r\rThis text view can also use attributed strings.";
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:textToAdd];
// make red text
// [attrString addAttribute:NSForegroundColorAttributeName
// value:[UIColor redColor]
// range:NSMakeRange([attrString length] - 19, 19)];
//
// // make blue text
// [attrString addAttribute:NSForegroundColorAttributeName
// value:[UIColor blueColor]
// range:NSMakeRange([attrString length] - 23, 3)];
// [attrString addAttribute:NSUnderlineStyleAttributeName
// value:[NSNumber numberWithInteger:1]
// range:NSMakeRange([attrString length] - 23, 3)];
//[self.textView setAttributedText:attrString];
self.textView.returnKeyType = UIReturnKeyDefault;
self.textView.keyboardType = UIKeyboardTypeDefault; // use the default type input method (entire keyboard)
self.textView.scrollEnabled = YES;
// note: for UITextView, if you don't like auto correction while typing use:
// myTextView.autocorrectionType = UITextAutocorrectionTypeNo;
//[self.view addSubview:self.textView];
self.view = self.textView;
CGSize sizeDevice = [[UIScreen mainScreen] bounds].size;
g_sizeDevice = sizeDevice;
g_rectPos = CGRectMake(0, sizeDevice.height, sizeDevice.width, 60);
self.view.frame = g_rectPos;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = NSLocalizedString(@"TextViewTitle", @"");
[self setupTextView];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// listen for keyboard hide/show notifications so we can properly adjust the table's height
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
}
#pragma mark - Notifications
- (void)adjustViewForKeyboardReveal:(BOOL)showKeyboard notificationInfo:(NSDictionary *)notificationInfo
{
// the keyboard is showing so resize the table's height
}
- (void)keyboardWillShow:(NSNotification *)notification
{
//NSLog(@" textviewctrl keyboardWillShow");
[self adjustViewForKeyboardReveal:YES notificationInfo:[notification userInfo]];
CGRect keyboardRect;
[[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardRect];
AppDelegate* pApp = (AppDelegate*)[ [UIApplication sharedApplication] delegate ];
CGRect finalRectRoot = [pApp.viewController.view convertRect:keyboardRect fromView:nil];
g_textviewHeight = keyboardRect.size.height/5;
CGRect kbPos = CGRectMake(finalRectRoot.origin.x, finalRectRoot.origin.y-g_textviewHeight, finalRectRoot.size.width, finalRectRoot.size.height);
self.view.frame = kbPos;
}
- (void)keyboardWillHide:(NSNotification *)aNotification
{
[self adjustViewForKeyboardReveal:NO notificationInfo:[aNotification userInfo]];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIKeyboardWillHideNotification
object:nil];
}
#pragma mark - UITextViewDelegate
- (void)saveAction:(id)sender
{
// finish typing text/dismiss the keyboard by removing it as the first responder
//
[self.textView resignFirstResponder];
self.navigationItem.rightBarButtonItem = nil; // this will remove the "save" button
}
- (void)textViewDidBeginEditing:(UITextView *)textView
{
// provide my own Save button to dismiss the keyboard
UIBarButtonItem* saveItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone
target:self
action:@selector(saveAction:)];
self.navigationItem.rightBarButtonItem = saveItem;
}
- (void)textViewDidEndEditing:(UITextView *)textView
{
NSString* strText = textView.text;
const char* pStr = [strText UTF8String];
EngineShell::UIInsertText(pStr);
[TextViewController showKeyboard:false ];
}
- (BOOL) textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if([text isEqualToString:@"\n"])
{
[g_textEdit resignFirstResponder];
g_textEdit.hidden = TRUE;
return NO;
}
else if( range.location >= g_maxCharCount )
{
return NO;
}
return YES;
}
@end

View File

@ -207,7 +207,7 @@ DeviceLevel GetDeviceLevel()
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *documentsDirectory = [paths objectAtIndex:0];
const char *appWriteableDic = [documentsDirectory UTF8String]; const char *appWriteableDic = [documentsDirectory UTF8String];
EngineShell::InitEngine(g_Width,g_Height,resChar,appWriteableDic,"asset:BeginScene.scene",true); EngineShell::InitEngine(g_Width,g_Height,resChar,appWriteableDic,"asset:editBox3.scene",false);
} }

View File

@ -0,0 +1,41 @@
/****************************************************************************
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
//
// OCAndCPlusInterface.h
// GameApp
//
// Created by xuhengjin on 4/8/14.
// Copyright (c) 2014 webJet. All rights reserved.
//
#ifndef __GameApp__OCAndCPlusInterface__
#define __GameApp__OCAndCPlusInterface__
class OCAndCPlusInterface
{
public:
static void showKeyboard(bool bShow,const char* contentUtf8);
};
#endif /* defined(__GameApp__OCAndCPlusInterface__) */

View File

@ -34,7 +34,12 @@
#include "input/inputwindowsource.h" #include "input/inputwindowsource.h"
#include "input/osx/osxinputsource.h" #include "input/osx/osxinputsource.h"
#include "input/osx/osxtouchevent.h" #include "input/osx/osxtouchevent.h"
#include "input/mobilekeyboardevent.h"
#include "addons/shadercompiler/ShadercompilerConfig.h" #include "addons/shadercompiler/ShadercompilerConfig.h"
#include "addons/myguiengine/include/MyGUI_UString.h"
#include "app/guifeature/scriptgui.h"
using namespace RenderBase; using namespace RenderBase;
@ -120,5 +125,50 @@ void OnStopped()
g_pApp->OnStopped(); g_pApp->OnStopped();
} }
void UIInsertText(const char* wstr)
{
#if __OSX__
MyGUI::UString uiStr(wstr);
App::ScriptGui::SetFocusedEditboxCaption(uiStr);
MyGUI::InputManager::getInstance().setKeyFocusWidget(nullptr);
#elif __ANDROID__
std::wstring stdWstr = uiStr.asWStr();
for ( IndexT i = 0; i < stdWstr.length(); i++ )
{
Input::MobileKeyboardEvent keyboardEvent;
keyboardEvent.SetType(Input::MoibleInputEvent::INPUT_EVENT_TYPE_KEY);
keyboardEvent.SetMotionType(Input::MobileKeyboardEvent::MOTION_EVENT_CHAR);
Input::Char characterCode = (Input::Char)stdWstr.at(i);
keyboardEvent.SetChar(characterCode);
const GPtr<Input::InputSource>& pInputSource = g_pApp->GetInputSource();
if (pInputSource.isvalid())
{
pInputSource.downcast<OSXInput::OSXInputSource>()->OnOSXProc(&keyboardEvent);
}
}
#endif
}
void UIDeleteBackward()
{
Input::MobileKeyboardEvent keyboardEvent;
keyboardEvent.SetType(Input::MoibleInputEvent::INPUT_EVENT_TYPE_KEY);
keyboardEvent.SetMotionType(Input::MobileKeyboardEvent::MOTION_EVENT_KEY_DOWN);
keyboardEvent.SetKeycode(Input::InputKey::Back);
const GPtr<Input::InputSource>& pInputSource = g_pApp->GetInputSource();
if (pInputSource.isvalid())
{
pInputSource.downcast<OSXInput::OSXInputSource>()->OnOSXProc(&keyboardEvent);
//send keyrelease
keyboardEvent.SetMotionType(Input::MobileKeyboardEvent::MOTION_EVENT_KEY_UP);
pInputSource.downcast<OSXInput::OSXInputSource>()->OnOSXProc(&keyboardEvent);
}
}
} }

View File

@ -10,7 +10,6 @@
#define GenesisEngineLib_Genesis_h #define GenesisEngineLib_Genesis_h
#include <vector> #include <vector>
namespace EngineShell namespace EngineShell
{ {
enum InputAciton enum InputAciton
@ -34,6 +33,8 @@ namespace EngineShell
void TouchPoint( const TouchDataVector& touchDatas, const InputAciton& action ); void TouchPoint( const TouchDataVector& touchDatas, const InputAciton& action );
void OnResumed(); void OnResumed();
void OnStopped(); void OnStopped();
void UIInsertText(const char* wstr);
void UIDeleteBackward();
} }
#endif #endif

View File

@ -115,6 +115,7 @@ SET ( _HEADER_FILES
inputmobileconfig.h inputmobileconfig.h
mobileinputevent.h mobileinputevent.h
mobiletouchevent.h mobiletouchevent.h
mobilekeyboardevent.h
) )
# folder # folder

View File

@ -29,6 +29,7 @@ THE SOFTWARE.
#include "input/android/androidtouchevent.h" #include "input/android/androidtouchevent.h"
#include "graphicsystem/GraphicSystem.h" #include "graphicsystem/GraphicSystem.h"
#include "input/inputmobileconfig.h" #include "input/inputmobileconfig.h"
#include "input/mobilekeyboardevent.h"
namespace AndroidInput namespace AndroidInput
{ {
@ -102,14 +103,56 @@ int AndroidInputSource::OnAndroidProc(MoibleInputEvent* pEvent)
break; break;
case MoibleInputEvent::INPUT_EVENT_TYPE_KEY: case MoibleInputEvent::INPUT_EVENT_TYPE_KEY:
break; {
default: OnKeyboardEvent(pEvent);
}
break; break;
} }
return 0; return 0;
} }
void AndroidInputSource::OnKeyboardEvent(const Input::MoibleInputEvent* pEvent)
{
//put event to eventProcessList
if ( !pEvent )
{
return;
}
Input::MoibleInputEvent* punCEvent = const_cast<Input::MoibleInputEvent*>(pEvent);
Input::MobileKeyboardEvent* pkeyEvent = dynamic_cast<Input::MobileKeyboardEvent*>( punCEvent );
if ( !pkeyEvent )
{
return;
}
Input::InputEvent inputEvent;
switch(pkeyEvent->GetMotionType())
{
case Input::MobileKeyboardEvent::MOTION_EVENT_KEY_DOWN:
{
inputEvent.SetType(Input::InputEvent::KeyDown);
inputEvent.SetKey(pkeyEvent->GetKeycode());
}
break;
case Input::MobileKeyboardEvent::MOTION_EVENT_KEY_UP:
{
inputEvent.SetType(Input::InputEvent::KeyUp);
inputEvent.SetKey(pkeyEvent->GetKeycode());
}
break;
case Input::MobileKeyboardEvent::MOTION_EVENT_CHAR:
{
inputEvent.SetType(Input::InputEvent::Character);
inputEvent.SetChar(pkeyEvent->GetChar());
}
break;
default:
break;
}
m_InputEventList.Append(inputEvent);
}
void AndroidInputSource::OnTouchEvent(const MobileTouchEvent* pEvent) void AndroidInputSource::OnTouchEvent(const MobileTouchEvent* pEvent)
{ {
#if _DEBUG #if _DEBUG
@ -126,11 +169,8 @@ void AndroidInputSource::OnTouchEvent(const MobileTouchEvent* pEvent)
case MobileTouchEvent::MOTION_EVENT_ACTION_DOWN: case MobileTouchEvent::MOTION_EVENT_ACTION_DOWN:
case MobileTouchEvent::MOTION_EVENT_ACTION_UP: case MobileTouchEvent::MOTION_EVENT_ACTION_UP:
case MobileTouchEvent::MOTION_EVENT_ACTION_CANCEL:
OnTouch(pEvent, actionType); OnTouch(pEvent, actionType);
break; break;
default:
break;
} }
} }
@ -169,12 +209,6 @@ void AndroidInputSource::OnTouch(const MobileTouchEvent* pEvent, const int type)
inputEvent.SetType(InputEvent::TouchMotionUp); inputEvent.SetType(InputEvent::TouchMotionUp);
m_InputEventList.Append(inputEvent); m_InputEventList.Append(inputEvent);
break; break;
case MobileTouchEvent::MOTION_EVENT_ACTION_CANCEL:
inputEvent.SetType(InputEvent::TouchMotionCancel);
m_InputEventList.Append(inputEvent);
break;
default:
break;
} }
} }

View File

@ -69,6 +69,7 @@ protected:
void OnTouchMove(const Input::MobileTouchEvent* pEvent); void OnTouchMove(const Input::MobileTouchEvent* pEvent);
void OnTouch(const Input::MobileTouchEvent* pEvent, const int type); void OnTouch(const Input::MobileTouchEvent* pEvent, const int type);
void OnKeyboardEvent(const Input::MoibleInputEvent* pEvent);
protected: protected:
Util::Array<Input::InputEvent> m_InputEventList; Util::Array<Input::InputEvent> m_InputEventList;

View File

@ -144,7 +144,7 @@ InputMouseBase::OnEvent(const InputEvent& inputEvent)
case InputEvent::MouseMove: case InputEvent::MouseMove:
this->UpdateMousePositions(inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos()); this->UpdateMousePositions(inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos());
this->currentEvents.Append(MouseButtonEvent(InputMouseButton::InvalidMouseButton, inputEvent.GetType())); this->currentEvents.Append(MouseButtonEvent(InputMouseButton::InvalidMouseButton, inputEvent.GetType(),inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos()));
break; break;
case InputEvent::RawMouseMove: case InputEvent::RawMouseMove:
@ -159,7 +159,7 @@ InputMouseBase::OnEvent(const InputEvent& inputEvent)
this->buttonStates[btn].down = true; this->buttonStates[btn].down = true;
this->buttonStates[btn].pressed = true; this->buttonStates[btn].pressed = true;
this->UpdateMousePositions(inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos()); this->UpdateMousePositions(inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos());
this->currentEvents.Append(MouseButtonEvent(btn, inputEvent.GetType())); this->currentEvents.Append(MouseButtonEvent(btn, inputEvent.GetType(),inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos()));
} }
} }
break; break;
@ -178,7 +178,7 @@ InputMouseBase::OnEvent(const InputEvent& inputEvent)
// be cleared at the beginning of the next frame // be cleared at the beginning of the next frame
// when the button up flag was set // when the button up flag was set
this->UpdateMousePositions(inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos()); this->UpdateMousePositions(inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos());
this->currentEvents.Append(MouseButtonEvent(btn, inputEvent.GetType())); this->currentEvents.Append(MouseButtonEvent(btn, inputEvent.GetType(),inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos()));
} }
} }
break; break;
@ -190,19 +190,19 @@ InputMouseBase::OnEvent(const InputEvent& inputEvent)
{ {
this->buttonStates[btn].doubleClicked = true; this->buttonStates[btn].doubleClicked = true;
this->UpdateMousePositions(inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos()); this->UpdateMousePositions(inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos());
this->currentEvents.Append(MouseButtonEvent(btn, inputEvent.GetType())); this->currentEvents.Append(MouseButtonEvent(btn, inputEvent.GetType(),inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos()));
} }
} }
break; break;
case InputEvent::MouseWheelForward: case InputEvent::MouseWheelForward:
this->wheelForward = true; this->wheelForward = true;
this->currentEvents.Append(MouseButtonEvent(InputMouseButton::MiddleButton, inputEvent.GetType())); this->currentEvents.Append(MouseButtonEvent(InputMouseButton::MiddleButton, inputEvent.GetType(),inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos()));
break; break;
case InputEvent::MouseWheelBackward: case InputEvent::MouseWheelBackward:
this->wheelBackward = true; this->wheelBackward = true;
this->currentEvents.Append(MouseButtonEvent(InputMouseButton::MiddleButton, inputEvent.GetType())); this->currentEvents.Append(MouseButtonEvent(InputMouseButton::MiddleButton, inputEvent.GetType(),inputEvent.GetAbsMousePos(), inputEvent.GetNormMousePos()));
break; break;
default: default:

View File

@ -117,7 +117,7 @@ bool InputTouchScreenBase::OnEvent(const Input::InputEvent& inputEvent)
const IndexT id = inputEvent.GetPointerId(i); const IndexT id = inputEvent.GetPointerId(i);
m_FingerStates[id].pressed = true; m_FingerStates[id].pressed = true;
UpdateFingerPositions(inputEvent.GetAbsTouchPos(id), inputEvent.GetNormTouchPos(id), id); UpdateFingerPositions(inputEvent.GetAbsTouchPos(id), inputEvent.GetNormTouchPos(id), id);
m_CurrentEvents.Append(TouchEvent(id, inputEvent.GetType())); m_CurrentEvents.Append(TouchEvent(id, inputEvent.GetType(),inputEvent.GetAbsTouchPos(id), inputEvent.GetNormTouchPos(id) ));
} }
} }
@ -132,7 +132,7 @@ bool InputTouchScreenBase::OnEvent(const Input::InputEvent& inputEvent)
const IndexT id = inputEvent.GetPointerId(i); const IndexT id = inputEvent.GetPointerId(i);
m_FingerStates[id].down = true; m_FingerStates[id].down = true;
UpdateFingerPositions(inputEvent.GetAbsTouchPos(id), inputEvent.GetNormTouchPos(id), id); UpdateFingerPositions(inputEvent.GetAbsTouchPos(id), inputEvent.GetNormTouchPos(id), id);
m_CurrentEvents.Append(TouchEvent(id, inputEvent.GetType())); m_CurrentEvents.Append(TouchEvent(id, inputEvent.GetType(),inputEvent.GetAbsTouchPos(id), inputEvent.GetNormTouchPos(id) ));
} }
} }
break; break;
@ -146,7 +146,7 @@ bool InputTouchScreenBase::OnEvent(const Input::InputEvent& inputEvent)
const IndexT id = inputEvent.GetPointerId(i); const IndexT id = inputEvent.GetPointerId(i);
m_FingerStates[id].up = true; m_FingerStates[id].up = true;
UpdateFingerPositions(inputEvent.GetAbsTouchPos(id), inputEvent.GetNormTouchPos(id), id); UpdateFingerPositions(inputEvent.GetAbsTouchPos(id), inputEvent.GetNormTouchPos(id), id);
m_CurrentEvents.Append(TouchEvent(id, inputEvent.GetType())); m_CurrentEvents.Append(TouchEvent(id, inputEvent.GetType(),inputEvent.GetAbsTouchPos(id), inputEvent.GetNormTouchPos(id) ));
} }
} }
break; break;
@ -161,7 +161,7 @@ bool InputTouchScreenBase::OnEvent(const Input::InputEvent& inputEvent)
m_FingerStates[id].down = false; m_FingerStates[id].down = false;
m_FingerStates[id].pressed = false; m_FingerStates[id].pressed = false;
m_FingerStates[id].up = true; m_FingerStates[id].up = true;
m_CurrentEvents.Append(TouchEvent(id, inputEvent.GetType())); m_CurrentEvents.Append(TouchEvent(id, inputEvent.GetType(),inputEvent.GetAbsTouchPos(id), inputEvent.GetNormTouchPos(id) ));
} }
} }
} }

View File

@ -62,29 +62,37 @@ namespace Input
struct TouchEvent : public EventBase struct TouchEvent : public EventBase
{ {
int id; int id;
Math::float2 pixelPos;
Math::float2 screenPos;
inline TouchEvent() inline TouchEvent()
:id(-1) :id(-1)
{ {
} }
inline TouchEvent(int id, InputEvent::Type event) inline TouchEvent(int id, InputEvent::Type event,Math::float2 pixelPos,Math::float2 screenPos)
:EventBase(event) :EventBase(event)
{ {
this->id = id; this->id = id;
this->pixelPos = pixelPos;
this->screenPos = screenPos;
} }
}; };
struct MouseButtonEvent : public EventBase struct MouseButtonEvent : public EventBase
{ {
InputMouseButton::Code button; InputMouseButton::Code button;
Math::float2 pixelPos;
Math::float2 screenPos;
inline MouseButtonEvent() inline MouseButtonEvent()
:button(InputMouseButton::InvalidMouseButton) :button(InputMouseButton::InvalidMouseButton)
{ {
} }
inline MouseButtonEvent(InputMouseButton::Code button, InputEvent::Type event) inline MouseButtonEvent(InputMouseButton::Code button, InputEvent::Type event,Math::float2 pixelPos,Math::float2 screenPos)
:EventBase(event) :EventBase(event)
{ {
this->button = button; this->button = button;
this->pixelPos = pixelPos;
this->screenPos = screenPos;
} }
}; };

View File

@ -27,7 +27,7 @@ THE SOFTWARE.
#if __WIN32__ #if __WIN32__
namespace Input namespace Input
{ {
__ImplementClass(Input::InputWindowSource, 'WDIS', Win32Input::Win32InputWindowSource); __ImplementClass(Input::InputWindowSource, 'WDIS', Win32Input::Win32InputWebWindowSource);
} }
#elif __ANDROID__ #elif __ANDROID__
namespace Input namespace Input

View File

@ -28,10 +28,10 @@ THE SOFTWARE.
#if __WIN32__ #if __WIN32__
#include "input/win32/win32inputwindowsource.h" #include "input/win32/win32inputwebwindowsource.h"
namespace Input namespace Input
{ {
class InputWindowSource : public Win32Input::Win32InputWindowSource class InputWindowSource : public Win32Input::Win32InputWebWindowSource
{ {
__DeclareClass(InputWindowSource); __DeclareClass(InputWindowSource);
}; };

View File

@ -27,7 +27,7 @@ THE SOFTWARE.
namespace Input namespace Input
{ {
class MoibleInputEvent class MoibleInputEvent
{ {
public: public:
@ -43,6 +43,7 @@ public:
}; };
MoibleInputEvent(); MoibleInputEvent();
virtual ~MoibleInputEvent();
/// set event type /// set event type
void SetType(Type t); void SetType(Type t);
@ -59,6 +60,10 @@ inline MoibleInputEvent::MoibleInputEvent()
: m_Type(InvalidType) : m_Type(InvalidType)
{ {
}
inline MoibleInputEvent::~MoibleInputEvent()
{
} }
inline void MoibleInputEvent::SetType(Type t) inline void MoibleInputEvent::SetType(Type t)

View File

@ -0,0 +1,106 @@
/****************************************************************************
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
#ifndef __mobilekeyboardevent_H__
#define __mobilekeyboardevent_H__
#include "input/mobileinputevent.h"
#include "inputkey.h"
#include "inputchar.h"
namespace Input
{
class MobileKeyboardEvent : public Input::MoibleInputEvent
{
public:
enum MotionType
{
MOTION_EVENT_KEY_DOWN = 0,
MOTION_EVENT_KEY_UP,
MOTION_EVENT_CHAR,
};
MobileKeyboardEvent();
~MobileKeyboardEvent();
public:
void SetMotionType(const MotionType type);
const MotionType GetMotionType() const;
void SetKeycode(InputKey::Code keyc);
InputKey::Code GetKeycode();
void SetChar(Char& keyc);
Char GetChar();
protected:
MotionType m_MotionType;
InputKey::Code keyCode;
Char character;
};
inline MobileKeyboardEvent::MobileKeyboardEvent()
{
}
inline MobileKeyboardEvent::~MobileKeyboardEvent()
{
}
inline void MobileKeyboardEvent::SetMotionType(const MotionType type)
{
m_MotionType = type;
}
inline const MobileKeyboardEvent::MotionType MobileKeyboardEvent::GetMotionType() const
{
return m_MotionType;
}
inline void MobileKeyboardEvent::SetKeycode(InputKey::Code keyc)
{
keyCode = keyc;
}
inline InputKey::Code MobileKeyboardEvent::GetKeycode()
{
return keyCode;
}
inline void MobileKeyboardEvent::SetChar(Char& keyc)
{
character = keyc;
}
inline Char MobileKeyboardEvent::GetChar()
{
return character;
}
}
#endif

View File

@ -29,6 +29,7 @@ THE SOFTWARE.
#include "input/osx/osxtouchevent.h" #include "input/osx/osxtouchevent.h"
#include "graphicsystem/GraphicSystem.h" #include "graphicsystem/GraphicSystem.h"
#include "input/inputmobileconfig.h" #include "input/inputmobileconfig.h"
#include "input/mobilekeyboardevent.h"
namespace OSXInput namespace OSXInput
{ {
@ -98,12 +99,56 @@ int OSXInputSource::OnOSXProc(MoibleInputEvent* pEvent)
break; break;
case MoibleInputEvent::INPUT_EVENT_TYPE_KEY: case MoibleInputEvent::INPUT_EVENT_TYPE_KEY:
{
OnKeyboardEvent(pEvent);
}
break; break;
} }
return 0; return 0;
} }
void OSXInputSource::OnKeyboardEvent(const Input::MoibleInputEvent* pEvent)
{
//put event to eventProcessList
if ( !pEvent )
{
return;
}
Input::MoibleInputEvent* punCEvent = const_cast<Input::MoibleInputEvent*>(pEvent);
Input::MobileKeyboardEvent* pkeyEvent = dynamic_cast<Input::MobileKeyboardEvent*>( punCEvent );
if ( !pkeyEvent )
{
return;
}
Input::InputEvent inputEvent;
switch(pkeyEvent->GetMotionType())
{
case Input::MobileKeyboardEvent::MOTION_EVENT_KEY_DOWN:
{
inputEvent.SetType(Input::InputEvent::KeyDown);
inputEvent.SetKey(pkeyEvent->GetKeycode());
}
break;
case Input::MobileKeyboardEvent::MOTION_EVENT_KEY_UP:
{
inputEvent.SetType(Input::InputEvent::KeyUp);
inputEvent.SetKey(pkeyEvent->GetKeycode());
}
break;
case Input::MobileKeyboardEvent::MOTION_EVENT_CHAR:
{
inputEvent.SetType(Input::InputEvent::Character);
inputEvent.SetChar(pkeyEvent->GetChar());
}
break;
default:
break;
}
m_InputEventList.Append(inputEvent);
}
void OSXInputSource::OnTouchEvent(const MobileTouchEvent* pEvent) void OSXInputSource::OnTouchEvent(const MobileTouchEvent* pEvent)
{ {
const MobileTouchEvent::MotionType actionType = pEvent->GetMotionType(); const MobileTouchEvent::MotionType actionType = pEvent->GetMotionType();

View File

@ -70,6 +70,8 @@ protected:
void OnTouch(const Input::MobileTouchEvent* pEvent, const int type); void OnTouch(const Input::MobileTouchEvent* pEvent, const int type);
void OnKeyboardEvent(const Input::MoibleInputEvent* pEvent);
protected: protected:
Util::Array<Input::InputEvent> m_InputEventList; Util::Array<Input::InputEvent> m_InputEventList;

View File

@ -35,7 +35,7 @@ namespace Win32Input
__ImplementClass(Win32Input::Win32InputWebWindowSource, 'WWWI', Input::InputSource ); __ImplementClass(Win32Input::Win32InputWebWindowSource, 'WWWI', Input::InputSource );
int _virtualKeyToText(UINT _virtualKey) int Win32InputWebWindowSource::VirtualKeyToText(UINT _virtualKey)
{ {
static WCHAR deadKey = 0; static WCHAR deadKey = 0;
@ -212,7 +212,7 @@ namespace Win32Input
//inputEvent.SetType(InputEvent::KeyDown); //inputEvent.SetType(InputEvent::KeyDown);
//inputEvent.SetKey(keyCode); //inputEvent.SetKey(keyCode);
//mInputEventList.Append(inputEvent); //mInputEventList.Append(inputEvent);
SetKeyDown(mInputEventList, inputEvent, keyCode, _virtualKeyToText((UINT)wParam)); SetKeyDown(mInputEventList, inputEvent, keyCode, VirtualKeyToText((UINT)wParam));
return 0; return 0;
} }
} }
@ -574,6 +574,8 @@ namespace Win32Input
case VK_OEM_6: return Input::InputKey::RightBracket; case VK_OEM_6: return Input::InputKey::RightBracket;
case VK_OEM_7: return Input::InputKey::Quote; case VK_OEM_7: return Input::InputKey::Quote;
case VK_PROCESSKEY: return Input::InputKey::InvalidKey; //输入法消息。
case '0': return Input::InputKey::Key0; case '0': return Input::InputKey::Key0;
case '1': return Input::InputKey::Key1; case '1': return Input::InputKey::Key1;
case '2': return Input::InputKey::Key2; case '2': return Input::InputKey::Key2;

View File

@ -101,7 +101,7 @@ namespace Win32Input
{ {
return mInputEventList; return mInputEventList;
} }
static int VirtualKeyToText(UINT _virtualKey);
protected: protected:
void mouseMove(const Math::float2& absMousePos); void mouseMove(const Math::float2& absMousePos);

View File

@ -141,18 +141,22 @@ namespace GenesisMaterialMaker
#endif #endif
for (SizeT i = 0; i < m_matParamList.Size(); ++i) for (SizeT i = 0; i < m_matParamList.Size(); ++i)
{ {
if(m_matParamList[i]->GetType() == Graphic::eMaterialParamTexture2D) if(m_matParamList[i]->GetType() == Graphic::eMaterialParamTexture2D)
{ {
static_cast<Graphic::MaterialParamTex2D*>(m_matParamList[i])->SetHandle(tex2DHandle); static_cast<Graphic::MaterialParamTex2D*>(m_matParamList[i])->SetHandle(tex2DHandle);
static_cast<Graphic::MaterialParamTex2D*>(m_matParamList[i])->SetStringValue("sys:white.jpg");
} }
#if __WIN32__ && RENDERDEVICE_D3D9 #if __WIN32__ && RENDERDEVICE_D3D9
else if (m_matParamList[i]->GetType() == Graphic::eMaterialParamTexture3D) else if (m_matParamList[i]->GetType() == Graphic::eMaterialParamTexture3D)
{ {
static_cast<Graphic::MaterialParamTex3D*>(m_matParamList[i])->SetHandle(tex3DHandle); static_cast<Graphic::MaterialParamTex3D*>(m_matParamList[i])->SetHandle(tex3DHandle);
static_cast<Graphic::MaterialParamTex3D*>(m_matParamList[i])->SetStringValue("sys:Random3D.dds");
} }
else if(m_matParamList[i]->GetType() == Graphic::eMaterialParamTextureCUBE) else if(m_matParamList[i]->GetType() == Graphic::eMaterialParamTextureCUBE)
{ {
static_cast<Graphic::MaterialParamTexCube*>(m_matParamList[i])->SetHandle(texCubeHandle); static_cast<Graphic::MaterialParamTexCube*>(m_matParamList[i])->SetHandle(texCubeHandle);
static_cast<Graphic::MaterialParamTex3D*>(m_matParamList[i])->SetStringValue("sys:whitecube.dds");
} }
#endif #endif
} }

View File

@ -1558,7 +1558,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 72 "GenesisShaderBison.ycc" #line 72 "GenesisShaderBison.ycc"
{ //n_printf("init genesisshader\n"); { //n_debuglog("init genesisshader\n");
g_GenesisMaterial->SetName((yyvsp[(2) - (2)].str)); g_GenesisMaterial->SetName((yyvsp[(2) - (2)].str));
delete[] (yyvsp[(2) - (2)].str); delete[] (yyvsp[(2) - (2)].str);
ResetParserParams(); ResetParserParams();
@ -1570,7 +1570,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 78 "GenesisShaderBison.ycc" #line 78 "GenesisShaderBison.ycc"
{ //n_printf("in genesisshader,left\n"); { //n_debuglog("in genesisshader,left\n");
} }
break; break;
@ -1578,7 +1578,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 80 "GenesisShaderBison.ycc" #line 80 "GenesisShaderBison.ycc"
{ //n_printf("from PropertySection to genesisshader\n"); { //n_debuglog("from PropertySection to genesisshader\n");
} }
break; break;
@ -1586,7 +1586,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 82 "GenesisShaderBison.ycc" #line 82 "GenesisShaderBison.ycc"
{ //n_printf("out genesisshader,right\n"); { //n_debuglog("out genesisshader,right\n");
g_GenesisMaterial->AddMaterial(*g_curGenesisMakeMaterial); g_GenesisMaterial->AddMaterial(*g_curGenesisMakeMaterial);
delete g_curGenesisMakeMaterial; delete g_curGenesisMakeMaterial;
g_curGenesisMakeMaterial = 0; g_curGenesisMakeMaterial = 0;
@ -1597,7 +1597,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 87 "GenesisShaderBison.ycc" #line 87 "GenesisShaderBison.ycc"
{//n_printf("init PropertySection\n"); {//n_debuglog("init PropertySection\n");
} }
break; break;
@ -1605,7 +1605,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 89 "GenesisShaderBison.ycc" #line 89 "GenesisShaderBison.ycc"
{//n_printf("in ParameterSection,left\n"); {//n_debuglog("in ParameterSection,left\n");
} }
break; break;
@ -1613,7 +1613,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 91 "GenesisShaderBison.ycc" #line 91 "GenesisShaderBison.ycc"
{//n_printf("from ParameterSection to PropertySection\n"); {//n_debuglog("from ParameterSection to PropertySection\n");
} }
break; break;
@ -1621,7 +1621,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 93 "GenesisShaderBison.ycc" #line 93 "GenesisShaderBison.ycc"
{ //n_printf("out ParameterSection,right\n"); { //n_debuglog("out ParameterSection,right\n");
} }
break; break;
@ -1630,7 +1630,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 95 "GenesisShaderBison.ycc" #line 95 "GenesisShaderBison.ycc"
{ g_curGenesisMakeMaterial->SetRenderQueue(Graphic::RenderQueue::FromString((yyvsp[(3) - (3)].str))); { g_curGenesisMakeMaterial->SetRenderQueue(Graphic::RenderQueue::FromString((yyvsp[(3) - (3)].str)));
//n_printf("in PropertySection,setrenderqueue:%s\n", Util::String($3).AsCharPtr()); //n_debuglog("in PropertySection,setrenderqueue:%s\n", Util::String($3).AsCharPtr());
} }
break; break;
@ -1638,7 +1638,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 98 "GenesisShaderBison.ycc" #line 98 "GenesisShaderBison.ycc"
{ //n_printf("in TechniqueSection,left\n"); { //n_debuglog("in TechniqueSection,left\n");
g_curGenesisMakeTechnique = new GenesisMakeTechnique(); g_curGenesisMakeTechnique = new GenesisMakeTechnique();
} }
break; break;
@ -1647,7 +1647,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 101 "GenesisShaderBison.ycc" #line 101 "GenesisShaderBison.ycc"
{//n_printf("from TechniqueSection to PropertySection\n"); {//n_debuglog("from TechniqueSection to PropertySection\n");
} }
break; break;
@ -1655,7 +1655,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 103 "GenesisShaderBison.ycc" #line 103 "GenesisShaderBison.ycc"
{ //n_printf("in TechniqueSection,left\n"); { //n_debuglog("in TechniqueSection,left\n");
g_curGenesisMakeTechnique = new GenesisMakeTechnique(); g_curGenesisMakeTechnique = new GenesisMakeTechnique();
g_curGenesisMakeTechnique->SetName((yyvsp[(3) - (4)].str)); g_curGenesisMakeTechnique->SetName((yyvsp[(3) - (4)].str));
} }
@ -1665,7 +1665,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 107 "GenesisShaderBison.ycc" #line 107 "GenesisShaderBison.ycc"
{//n_printf("from TechniqueSection to PropertySection\n"); {//n_debuglog("from TechniqueSection to PropertySection\n");
} }
break; break;
@ -1673,7 +1673,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 109 "GenesisShaderBison.ycc" #line 109 "GenesisShaderBison.ycc"
{//n_printf("init ParameterSection\n"); {//n_debuglog("init ParameterSection\n");
} }
break; break;
@ -1705,7 +1705,13 @@ yyreduce:
g_curMatParam->SetName((yyvsp[(3) - (5)].str)); g_curMatParam->SetName((yyvsp[(3) - (5)].str));
g_curMatParam->SetDesc((yyvsp[(3) - (5)].str)); g_curMatParam->SetDesc((yyvsp[(3) - (5)].str));
g_curMatParam->SetStringValue((yyvsp[(5) - (5)].str)); g_curMatParam->SetStringValue((yyvsp[(5) - (5)].str));
//n_printf("define texture\n");
if ( g_curMatParam->GetStringValue() == "#UserDefTex")
{
g_curMatParam->SetHiddenInEditor(true);
}
//n_debuglog("define texture\n");
g_curGenesisMakeMaterial->AddMatParam(g_curMatParam); g_curGenesisMakeMaterial->AddMatParam(g_curMatParam);
g_curMatParam = NULL; g_curMatParam = NULL;
@ -1755,7 +1761,13 @@ yyreduce:
g_curMatParam->SetName((yyvsp[(3) - (6)].str)); g_curMatParam->SetName((yyvsp[(3) - (6)].str));
g_curMatParam->SetDesc((yyvsp[(4) - (6)].str)); g_curMatParam->SetDesc((yyvsp[(4) - (6)].str));
g_curMatParam->SetStringValue((yyvsp[(6) - (6)].str)); g_curMatParam->SetStringValue((yyvsp[(6) - (6)].str));
//n_printf("define texture\n");
if ( g_curMatParam->GetStringValue() == "#UserDefTex")
{
g_curMatParam->SetHiddenInEditor(true);
}
//n_debuglog("define texture\n");
g_curGenesisMakeMaterial->AddMatParam(g_curMatParam); g_curGenesisMakeMaterial->AddMatParam(g_curMatParam);
g_curMatParam = NULL; g_curMatParam = NULL;
@ -1814,6 +1826,18 @@ yyreduce:
g_curMatParam->SetDesc((yyvsp[(4) - (6)].str)); g_curMatParam->SetDesc((yyvsp[(4) - (6)].str));
g_curMatParam->SetStringValue((yyvsp[(6) - (6)].str)); g_curMatParam->SetStringValue((yyvsp[(6) - (6)].str));
if (
Util::String::MatchPattern(g_curMatParam->GetName(), "*Color*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*color*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*emissive*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*specular*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*diffuse*")
)
{
g_curMatParam->SetUseForColor(true);
}
g_curGenesisMakeMaterial->AddMatParam(g_curMatParam); g_curGenesisMakeMaterial->AddMatParam(g_curMatParam);
g_curMatParam = NULL; g_curMatParam = NULL;
} }
@ -1828,6 +1852,17 @@ yyreduce:
g_curMatParam->SetDesc((yyvsp[(3) - (5)].str)); g_curMatParam->SetDesc((yyvsp[(3) - (5)].str));
g_curMatParam->SetStringValue((yyvsp[(5) - (5)].str)); g_curMatParam->SetStringValue((yyvsp[(5) - (5)].str));
if (
Util::String::MatchPattern(g_curMatParam->GetName(), "*Color*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*color*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*emissive*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*specular*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*diffuse*")
)
{
g_curMatParam->SetUseForColor(true);
}
g_curGenesisMakeMaterial->AddMatParam(g_curMatParam); g_curGenesisMakeMaterial->AddMatParam(g_curMatParam);
g_curMatParam = NULL; g_curMatParam = NULL;
} }
@ -1865,7 +1900,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 248 "GenesisShaderBison.ycc" #line 248 "GenesisShaderBison.ycc"
{ //n_printf("init TechniqueSection\n"); { //n_debuglog("init TechniqueSection\n");
} }
break; break;
@ -1873,7 +1908,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 250 "GenesisShaderBison.ycc" #line 250 "GenesisShaderBison.ycc"
{ //n_printf("from PassSection to TechniqueSection\n"); { //n_debuglog("from PassSection to TechniqueSection\n");
} }
break; break;
@ -1881,7 +1916,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 252 "GenesisShaderBison.ycc" #line 252 "GenesisShaderBison.ycc"
{ //n_printf("out TechniqueSection,right\n"); { //n_debuglog("out TechniqueSection,right\n");
g_curGenesisMakeMaterial->AddTechnique(*g_curGenesisMakeTechnique); g_curGenesisMakeMaterial->AddTechnique(*g_curGenesisMakeTechnique);
delete g_curGenesisMakeTechnique; delete g_curGenesisMakeTechnique;
g_curGenesisMakeTechnique = 0; g_curGenesisMakeTechnique = 0;
@ -1892,7 +1927,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 258 "GenesisShaderBison.ycc" #line 258 "GenesisShaderBison.ycc"
{ //n_printf("init PassSection\n"); { //n_debuglog("init PassSection\n");
} }
break; break;
@ -1909,7 +1944,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 263 "GenesisShaderBison.ycc" #line 263 "GenesisShaderBison.ycc"
{ //n_printf("init Pass\n"); { //n_debuglog("init Pass\n");
} }
break; break;
@ -1917,7 +1952,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 265 "GenesisShaderBison.ycc" #line 265 "GenesisShaderBison.ycc"
{ //n_printf("in PassSection,left\n"); { //n_debuglog("in PassSection,left\n");
} }
break; break;
@ -1926,7 +1961,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 268 "GenesisShaderBison.ycc" #line 268 "GenesisShaderBison.ycc"
{ //n_printf("from codeSection to PassSection\n"); { //n_debuglog("from codeSection to PassSection\n");
} }
break; break;
@ -1935,7 +1970,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 270 "GenesisShaderBison.ycc" #line 270 "GenesisShaderBison.ycc"
{ {
//n_printf("out PassSection,right\n"); //n_debuglog("out PassSection,right\n");
g_curGenesisMakeTechnique->AddPass(*g_curMakePass); g_curGenesisMakeTechnique->AddPass(*g_curMakePass);
delete g_curMakePass; delete g_curMakePass;
g_curMakePass = 0; g_curMakePass = 0;
@ -1947,7 +1982,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 277 "GenesisShaderBison.ycc" #line 277 "GenesisShaderBison.ycc"
{ {
n_printf("in PassSection,left\n"); n_debuglog("in PassSection,left\n");
g_curMakePass = new GenesisMakePass(); g_curMakePass = new GenesisMakePass();
g_curMakePass->SetName("NoName"); g_curMakePass->SetName("NoName");
} }
@ -1958,7 +1993,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 282 "GenesisShaderBison.ycc" #line 282 "GenesisShaderBison.ycc"
{ {
n_printf("in PassSection,left\n"); n_debuglog("in PassSection,left\n");
g_curMakePass = new GenesisMakePass(); g_curMakePass = new GenesisMakePass();
g_curMakePass->SetName((yyvsp[(2) - (2)].str)); g_curMakePass->SetName((yyvsp[(2) - (2)].str));
} }
@ -1968,7 +2003,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 288 "GenesisShaderBison.ycc" #line 288 "GenesisShaderBison.ycc"
{ //n_printf("in codeSection\n"); { //n_debuglog("in codeSection\n");
} }
break; break;
@ -1976,7 +2011,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 290 "GenesisShaderBison.ycc" #line 290 "GenesisShaderBison.ycc"
{ //n_printf("from shadertype,to StateSection\n"); { //n_debuglog("from shadertype,to StateSection\n");
} }
break; break;
@ -1984,7 +2019,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 292 "GenesisShaderBison.ycc" #line 292 "GenesisShaderBison.ycc"
{ //n_printf("from shadertype,to shadertype\n"); { //n_debuglog("from shadertype,to shadertype\n");
} }
break; break;
@ -1994,7 +2029,7 @@ yyreduce:
#line 294 "GenesisShaderBison.ycc" #line 294 "GenesisShaderBison.ycc"
{ {
g_curMakePass->SetBuiltInMacro((yyvsp[(4) - (5)].str)); g_curMakePass->SetBuiltInMacro((yyvsp[(4) - (5)].str));
n_printf("set builtinMacro\n"); n_debuglog("set builtinMacro\n");
} }
break; break;
@ -2004,7 +2039,7 @@ yyreduce:
#line 298 "GenesisShaderBison.ycc" #line 298 "GenesisShaderBison.ycc"
{ {
g_curMakePass->SetCustumMacro((yyvsp[(4) - (5)].str)); g_curMakePass->SetCustumMacro((yyvsp[(4) - (5)].str));
n_printf("set builtinMacro\n"); n_debuglog("set builtinMacro\n");
} }
break; break;
@ -2012,7 +2047,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 303 "GenesisShaderBison.ycc" #line 303 "GenesisShaderBison.ycc"
{ //n_printf("in StateSection\n"); { //n_debuglog("in StateSection\n");
} }
break; break;
@ -2023,7 +2058,7 @@ yyreduce:
{ {
g_rsDesc = RenderBase::RenderStateDesc::Create(); g_rsDesc = RenderBase::RenderStateDesc::Create();
g_rsDesc->Setup(); g_rsDesc->Setup();
//n_printf("Create StateSection\n");//n_printf("init StateSection\n"); //n_debuglog("Create StateSection\n");//n_debuglog("init StateSection\n");
} }
break; break;
@ -2041,7 +2076,7 @@ yyreduce:
{ {
g_curMakePass->SetRenderStateDesc(g_rsDesc); g_curMakePass->SetRenderStateDesc(g_rsDesc);
g_rsDesc = 0; g_rsDesc = 0;
//n_printf("from RenderStateSetup,to shadertype\n"); //n_debuglog("from RenderStateSetup,to shadertype\n");
} }
break; break;
@ -2049,7 +2084,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 317 "GenesisShaderBison.ycc" #line 317 "GenesisShaderBison.ycc"
{ //n_printf("in RenderStateSetup\n"); { //n_debuglog("in RenderStateSetup\n");
} }
break; break;
@ -2090,7 +2125,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 334 "GenesisShaderBison.ycc" #line 334 "GenesisShaderBison.ycc"
{ //n_printf("set depthtest complete \n"); { //n_debuglog("set depthtest complete \n");
} }
break; break;
@ -2109,7 +2144,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 341 "GenesisShaderBison.ycc" #line 341 "GenesisShaderBison.ycc"
{ //n_printf("set blendmode complete \n"); { //n_debuglog("set blendmode complete \n");
} }
break; break;
@ -2117,7 +2152,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 343 "GenesisShaderBison.ycc" #line 343 "GenesisShaderBison.ycc"
{ //n_printf("set alphatest complete \n"); { //n_debuglog("set alphatest complete \n");
} }
break; break;
@ -2125,7 +2160,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 345 "GenesisShaderBison.ycc" #line 345 "GenesisShaderBison.ycc"
{ //n_printf("set samplerstate complete \n"); { //n_debuglog("set samplerstate complete \n");
} }
break; break;
@ -2242,7 +2277,7 @@ yyreduce:
{ {
g_curGenesisMakeGPUProgram = new GenesisMakeGPUProgram(); g_curGenesisMakeGPUProgram = new GenesisMakeGPUProgram();
g_curGenesisMakeGPUProgram->SetShaderType((yyvsp[(2) - (2)].str)); g_curGenesisMakeGPUProgram->SetShaderType((yyvsp[(2) - (2)].str));
//n_printf("in shaderType,SetShaderType\n"); //n_debuglog("in shaderType,SetShaderType\n");
delete[] (yyvsp[(2) - (2)].str); delete[] (yyvsp[(2) - (2)].str);
} }
break; break;
@ -2251,7 +2286,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 415 "GenesisShaderBison.ycc" #line 415 "GenesisShaderBison.ycc"
{ //n_printf("in shaderType,left\n"); { //n_debuglog("in shaderType,left\n");
} }
break; break;
@ -2259,7 +2294,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 417 "GenesisShaderBison.ycc" #line 417 "GenesisShaderBison.ycc"
{ //n_printf("from DeviceTypeSetup to shaderType\n"); { //n_debuglog("from DeviceTypeSetup to shaderType\n");
} }
break; break;
@ -2273,7 +2308,7 @@ yyreduce:
delete g_curGenesisMakeGPUProgram; delete g_curGenesisMakeGPUProgram;
g_curGenesisMakeGPUProgram = NULL; g_curGenesisMakeGPUProgram = NULL;
} }
//n_printf("out shaderType,right\n"); //n_debuglog("out shaderType,right\n");
} }
break; break;
@ -2281,7 +2316,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 428 "GenesisShaderBison.ycc" #line 428 "GenesisShaderBison.ycc"
{ n_printf("in DeviceTypeSetup\n");} { n_debuglog("in DeviceTypeSetup\n");}
break; break;
case 66: case 66:
@ -2290,7 +2325,7 @@ yyreduce:
#line 429 "GenesisShaderBison.ycc" #line 429 "GenesisShaderBison.ycc"
{ {
g_curGenesisMakeGPUProgram->SetDeviceType((yyvsp[(3) - (3)].str)); g_curGenesisMakeGPUProgram->SetDeviceType((yyvsp[(3) - (3)].str));
n_printf("in DeviceTypeSetup\n"); n_debuglog("in DeviceTypeSetup\n");
delete[] (yyvsp[(3) - (3)].str); delete[] (yyvsp[(3) - (3)].str);
} }
break; break;
@ -2299,7 +2334,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 434 "GenesisShaderBison.ycc" #line 434 "GenesisShaderBison.ycc"
{ n_printf("in DeviceTypeSetup,left\n"); { n_debuglog("in DeviceTypeSetup,left\n");
} }
break; break;
@ -2307,7 +2342,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 436 "GenesisShaderBison.ycc" #line 436 "GenesisShaderBison.ycc"
{ n_printf("from SubGPUProgramSetup to DeviceTypeSetup\n"); { n_debuglog("from SubGPUProgramSetup to DeviceTypeSetup\n");
} }
break; break;
@ -2315,7 +2350,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 438 "GenesisShaderBison.ycc" #line 438 "GenesisShaderBison.ycc"
{ n_printf("out DeviceTypeSetup,right\n"); { n_debuglog("out DeviceTypeSetup,right\n");
g_curMakePass->AddShaderProgram(*g_curGenesisMakeGPUProgram); g_curMakePass->AddShaderProgram(*g_curGenesisMakeGPUProgram);
} }
break; break;
@ -2324,14 +2359,14 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 441 "GenesisShaderBison.ycc" #line 441 "GenesisShaderBison.ycc"
{ n_printf("in empty SubGPUProgramSetup\n");} { n_debuglog("in empty SubGPUProgramSetup\n");}
break; break;
case 71: case 71:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 442 "GenesisShaderBison.ycc" #line 442 "GenesisShaderBison.ycc"
{ n_printf("in SubGPUProgramSetup\n"); { n_debuglog("in SubGPUProgramSetup\n");
} }
break; break;
@ -2339,7 +2374,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 444 "GenesisShaderBison.ycc" #line 444 "GenesisShaderBison.ycc"
{ n_printf("in SubGPUProgramSetup,left\n"); { n_debuglog("in SubGPUProgramSetup,left\n");
g_curGenesisSubGPUProgram = new GenesisSubGPUProgram(); g_curGenesisSubGPUProgram = new GenesisSubGPUProgram();
g_curGenesisSubGPUProgram->SetShaderMask((yyvsp[(3) - (5)].str)); g_curGenesisSubGPUProgram->SetShaderMask((yyvsp[(3) - (5)].str));
} }
@ -2349,7 +2384,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 448 "GenesisShaderBison.ycc" #line 448 "GenesisShaderBison.ycc"
{ n_printf("from CodeBlock to SubGPUProgramSetup\n"); { n_debuglog("from CodeBlock to SubGPUProgramSetup\n");
} }
break; break;
@ -2357,7 +2392,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 450 "GenesisShaderBison.ycc" #line 450 "GenesisShaderBison.ycc"
{ n_printf("out SubGPUProgramSetup,right\n"); { n_debuglog("out SubGPUProgramSetup,right\n");
g_curGenesisMakeGPUProgram->AddSubGpuProgram(*g_curGenesisSubGPUProgram); g_curGenesisMakeGPUProgram->AddSubGpuProgram(*g_curGenesisSubGPUProgram);
if(g_curGenesisSubGPUProgram != NULL) if(g_curGenesisSubGPUProgram != NULL)
{ {
@ -2371,7 +2406,7 @@ yyreduce:
/* Line 1455 of yacc.c */ /* Line 1455 of yacc.c */
#line 459 "GenesisShaderBison.ycc" #line 459 "GenesisShaderBison.ycc"
{ n_printf("in CodeBlock\n"); { n_debuglog("in CodeBlock\n");
} }
break; break;
@ -2381,7 +2416,7 @@ yyreduce:
#line 461 "GenesisShaderBison.ycc" #line 461 "GenesisShaderBison.ycc"
{ {
g_curGenesisSubGPUProgram->SetShaderCode((yyvsp[(3) - (3)].str)); g_curGenesisSubGPUProgram->SetShaderCode((yyvsp[(3) - (3)].str));
n_printf("in CodeBlock,AddGPUProgram\n"); n_debuglog("in CodeBlock,AddGPUProgram\n");
delete[] (yyvsp[(3) - (3)].str); delete[] (yyvsp[(3) - (3)].str);
} }
break; break;
@ -2395,7 +2430,7 @@ yyreduce:
g_curShaderParameter->SetRegister((yyvsp[(3) - (5)].num)); g_curShaderParameter->SetRegister((yyvsp[(3) - (5)].num));
g_curShaderParameter->SetName((yyvsp[(4) - (5)].str)); g_curShaderParameter->SetName((yyvsp[(4) - (5)].str));
g_curGenesisSubGPUProgram->AddParam(*g_curShaderParameter); g_curGenesisSubGPUProgram->AddParam(*g_curShaderParameter);
n_printf("bind texture\n"); delete[] (yyvsp[(4) - (5)].str); n_debuglog("bind texture\n"); delete[] (yyvsp[(4) - (5)].str);
delete g_curShaderParameter; delete g_curShaderParameter;
g_curShaderParameter = 0; g_curShaderParameter = 0;
} }
@ -2410,7 +2445,7 @@ yyreduce:
g_curShaderParameter->SetRegister((yyvsp[(3) - (5)].num)); g_curShaderParameter->SetRegister((yyvsp[(3) - (5)].num));
g_curShaderParameter->SetName((yyvsp[(4) - (5)].str)); g_curShaderParameter->SetName((yyvsp[(4) - (5)].str));
g_curGenesisSubGPUProgram->AddParam(*g_curShaderParameter); g_curGenesisSubGPUProgram->AddParam(*g_curShaderParameter);
//n_printf("setparam matrix register\n"); delete[] $4; //n_debuglog("setparam matrix register\n"); delete[] $4;
delete g_curShaderParameter; delete g_curShaderParameter;
g_curShaderParameter = 0; g_curShaderParameter = 0;
} }
@ -2425,7 +2460,7 @@ yyreduce:
g_curShaderParameter->SetRegister((yyvsp[(3) - (5)].num)); g_curShaderParameter->SetRegister((yyvsp[(3) - (5)].num));
g_curShaderParameter->SetName((yyvsp[(4) - (5)].str)); g_curShaderParameter->SetName((yyvsp[(4) - (5)].str));
g_curGenesisSubGPUProgram->AddParam(*g_curShaderParameter); g_curGenesisSubGPUProgram->AddParam(*g_curShaderParameter);
//n_printf("setparam vector register\n"); delete[] $4; //n_debuglog("setparam vector register\n"); delete[] $4;
delete g_curShaderParameter; delete g_curShaderParameter;
g_curShaderParameter = 0; g_curShaderParameter = 0;
} }
@ -2440,7 +2475,7 @@ yyreduce:
g_curShaderParameter->SetRegister((yyvsp[(3) - (5)].num)); g_curShaderParameter->SetRegister((yyvsp[(3) - (5)].num));
g_curShaderParameter->SetName((yyvsp[(4) - (5)].str)); g_curShaderParameter->SetName((yyvsp[(4) - (5)].str));
g_curGenesisSubGPUProgram->AddParam(*g_curShaderParameter); g_curGenesisSubGPUProgram->AddParam(*g_curShaderParameter);
//n_printf("setparam float register\n"); delete[] $4; //n_debuglog("setparam float register\n"); delete[] $4;
delete g_curShaderParameter; delete g_curShaderParameter;
g_curShaderParameter = 0; g_curShaderParameter = 0;
} }
@ -2666,7 +2701,7 @@ yyreturn:
int yyerror (const char *s) int yyerror (const char *s)
{ {
n_printf("GenesisShader Error: %s At line:%d\n",s,Genesislineno); n_debuglog("GenesisShader Error: %s At line:%d\n",s,Genesislineno);
return 0; return 0;
} }

View File

@ -132,6 +132,11 @@ ParameterSection:/* empty */ {//n_printf("init ParameterSection\n");
g_curMatParam->SetName($3); g_curMatParam->SetName($3);
g_curMatParam->SetDesc($3); g_curMatParam->SetDesc($3);
g_curMatParam->SetStringValue($5); g_curMatParam->SetStringValue($5);
if ( g_curMatParam->GetStringValue() == "#UserDefTex")
{
g_curMatParam->SetHiddenInEditor(true);
}
//n_printf("define texture\n"); //n_printf("define texture\n");
g_curGenesisMakeMaterial->AddMatParam(g_curMatParam); g_curGenesisMakeMaterial->AddMatParam(g_curMatParam);
g_curMatParam = NULL; g_curMatParam = NULL;
@ -176,6 +181,12 @@ ParameterSection:/* empty */ {//n_printf("init ParameterSection\n");
g_curMatParam->SetName($3); g_curMatParam->SetName($3);
g_curMatParam->SetDesc($4); g_curMatParam->SetDesc($4);
g_curMatParam->SetStringValue($6); g_curMatParam->SetStringValue($6);
if ( g_curMatParam->GetStringValue() == "#UserDefTex")
{
g_curMatParam->SetHiddenInEditor(true);
}
//n_printf("define texture\n"); //n_printf("define texture\n");
g_curGenesisMakeMaterial->AddMatParam(g_curMatParam); g_curGenesisMakeMaterial->AddMatParam(g_curMatParam);
g_curMatParam = NULL; g_curMatParam = NULL;
@ -217,6 +228,18 @@ ParameterSection:/* empty */ {//n_printf("init ParameterSection\n");
g_curMatParam->SetDesc($4); g_curMatParam->SetDesc($4);
g_curMatParam->SetStringValue($6); g_curMatParam->SetStringValue($6);
if (
Util::String::MatchPattern(g_curMatParam->GetName(), "*Color*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*color*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*emissive*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*specular*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*diffuse*")
)
{
g_curMatParam->SetUseForColor(true);
}
g_curGenesisMakeMaterial->AddMatParam(g_curMatParam); g_curGenesisMakeMaterial->AddMatParam(g_curMatParam);
g_curMatParam = NULL; g_curMatParam = NULL;
} }
@ -225,6 +248,17 @@ ParameterSection:/* empty */ {//n_printf("init ParameterSection\n");
g_curMatParam->SetDesc($3); g_curMatParam->SetDesc($3);
g_curMatParam->SetStringValue($5); g_curMatParam->SetStringValue($5);
if (
Util::String::MatchPattern(g_curMatParam->GetName(), "*Color*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*color*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*emissive*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*specular*")
|| Util::String::MatchPattern(g_curMatParam->GetName(), "*diffuse*")
)
{
g_curMatParam->SetUseForColor(true);
}
g_curGenesisMakeMaterial->AddMatParam(g_curMatParam); g_curGenesisMakeMaterial->AddMatParam(g_curMatParam);
g_curMatParam = NULL; g_curMatParam = NULL;
} }

View File

@ -130,7 +130,7 @@ namespace MyGUI
virtual void updateDropItems(); virtual void updateDropItems();
virtual void updateDropItemsState(const DDWidgetState& _state); virtual void updateDropItemsState(const DDWidgetState& _state);
void mouseDrag(MouseButton _id); bool mouseDrag(MouseButton _id);// expand by genesis-3d
void mouseButtonReleased(MouseButton _id); void mouseButtonReleased(MouseButton _id);
void mouseButtonPressed(MouseButton _id); void mouseButtonPressed(MouseButton _id);

View File

@ -282,7 +282,8 @@ namespace MyGUI
void notifyMouseDrag(Widget* _sender, int _left, int _top, MouseButton _id); void notifyMouseDrag(Widget* _sender, int _left, int _top, MouseButton _id);
void notifyMouseButtonDoubleClick(Widget* _sender); void notifyMouseButtonDoubleClick(Widget* _sender);
void notifyScrollChangePosition(ScrollBar* _sender, size_t _position); void notifyScrollChangePosition(ScrollBar* _sender, int _position);// expand by genesis-3d
void notifyMouseWheel(Widget* _sender, int _rel); void notifyMouseWheel(Widget* _sender, int _rel);
// обновление представления // обновление представления

View File

@ -143,6 +143,7 @@ namespace MyGUI
/*internal:*/ /*internal:*/
void _resetMouseFocusWidget(); void _resetMouseFocusWidget();
void _forceChangeMouseFocus(Widget* _focusNew, int _absx, int _absy, int _absz);// expand by genesis-3d
private: private:
// удаляем данный виджет из всех возможных мест // удаляем данный виджет из всех возможных мест
@ -158,6 +159,8 @@ namespace MyGUI
// сбрасывает клавишу повторения // сбрасывает клавишу повторения
void resetKey(); void resetKey();
bool changeMouseFocus(Widget* item, Widget* old_mouse_focus, int _absx, int _absy, int _absz);// expand by genesis-3d
private: private:
// виджеты которым принадлежит фокус // виджеты которым принадлежит фокус
Widget* mWidgetMouseFocus; Widget* mWidgetMouseFocus;

View File

@ -47,6 +47,20 @@ namespace MyGUI
public: public:
ItemBox(); ItemBox();
//------------------------------------------------------------------------------//
// expand by genesis-3d
/** Show VScroll when text size larger than EditBox */
void setVScrollVisible(bool _value);
/** Get Show VScroll flag */
bool isVScrollVisible() const;
/** Show HScroll when text size larger than EditBox */
void setHScrollVisible(bool _value);
/** Get Show HScroll flag */
bool isHScrollVisible() const;
//------------------------------------------------------------------------------//
//------------------------------------------------------------------------------// //------------------------------------------------------------------------------//
// манипуляции айтемами // манипуляции айтемами
@ -202,6 +216,10 @@ namespace MyGUI
virtual void _resetContainer(bool _update); virtual void _resetContainer(bool _update);
protected: protected:
virtual void onClientDragBegin(Widget* _sender, int _left, int _top, MouseButton _id);// expand by genesis-3d
virtual void onClientDragEnd(Widget* _sender);// expand by genesis-3d
virtual void onClientDrag(Widget* _sender, int _left, int _top, MouseButton _id);// expand by genesis-3d
virtual void initialiseOverride(); virtual void initialiseOverride();
virtual void shutdownOverride(); virtual void shutdownOverride();
@ -223,7 +241,7 @@ namespace MyGUI
void notifyKeyButtonPressed(Widget* _sender, KeyCode _key, Char _char); void notifyKeyButtonPressed(Widget* _sender, KeyCode _key, Char _char);
void notifyKeyButtonReleased(Widget* _sender, KeyCode _key); void notifyKeyButtonReleased(Widget* _sender, KeyCode _key);
void notifyScrollChangePosition(ScrollBar* _sender, size_t _index); void notifyScrollChangePosition(ScrollBar* _sender, int _index);// expand by genesis-3d
void notifyMouseWheel(Widget* _sender, int _rel); void notifyMouseWheel(Widget* _sender, int _rel);
void notifyRootMouseChangeFocus(Widget* _sender, bool _focus); void notifyRootMouseChangeFocus(Widget* _sender, bool _focus);
void notifyMouseButtonDoubleClick(Widget* _sender); void notifyMouseButtonDoubleClick(Widget* _sender);
@ -263,7 +281,28 @@ namespace MyGUI
private: private:
size_t calcIndexByWidget(Widget* _widget); size_t calcIndexByWidget(Widget* _widget);
// -------------------------------------------------------------------------
// expand by genesis-3d
float defualtSpeed() const;
void notifyScrollBarPress(Widget* _sender, int _left, int _top, MouseButton _id);// expand by genesis-3d
void pushContentPosition();
bool headEmpty() const;
bool tailEmpty() const;
void checkScrollState();
void scrollStop();
void scrollOverflow(float time);
void scrollForceOverflow(float time);
void scrollInertia(float time);
void notifyTick(float time);
void preDrag();
int dragOperator(int _current, int _length, int _sizeItem);
int getStartIndex() const;
void updateContentPosition(const IntPoint& _point);
void testSpeed();
void resetCounter();
void dragMove(float move);
void finalSpeed();
// -------------------------------------------------------------------------
void requestItemSize(); void requestItemSize();
virtual IntSize getContentSize(); virtual IntSize getContentSize();
@ -318,6 +357,20 @@ namespace MyGUI
Widget* mItemDrag; Widget* mItemDrag;
IntPoint mPointDragOffset; IntPoint mPointDragOffset;
float mPreCoord;// expand by genesis-3d
int mPreMouse;// expand by genesis-3d
float mTimeCounter;// expand by genesis-3d
float mMoveCounter;// expand by genesis-3d
float mScrollSpeed;// expand by genesis-3d
enum
{
ScrollStop,
ScrollOverflow,
ScrollForceOverflow,
ScrollInertia,
} mScrollState;// expand by genesis-3d
bool mAlignVert; bool mAlignVert;

View File

@ -259,7 +259,7 @@ namespace MyGUI
void onMouseWheel(int _rel); void onMouseWheel(int _rel);
void onKeyButtonPressed(KeyCode _key, Char _char); void onKeyButtonPressed(KeyCode _key, Char _char);
void notifyScrollChangePosition(ScrollBar* _sender, size_t _rel); void notifyScrollChangePosition(ScrollBar* _sender, int _rel);// expand by genesis-3d
void notifyMousePressed(Widget* _sender, int _left, int _top, MouseButton _id); void notifyMousePressed(Widget* _sender, int _left, int _top, MouseButton _id);
void notifyMouseDoubleClick(Widget* _sender); void notifyMouseDoubleClick(Widget* _sender);
void notifyMouseWheel(Widget* _sender, int _rel); void notifyMouseWheel(Widget* _sender, int _rel);

View File

@ -28,7 +28,8 @@
namespace MyGUI namespace MyGUI
{ {
typedef delegates::CMultiDelegate2<ScrollBar*, size_t> EventHandle_ScrollBarPtrSizeT; //typedef delegates::CMultiDelegate2<ScrollBar*, size_t> EventHandle_ScrollBarPtrSizeT; old code
typedef delegates::CMultiDelegate2<ScrollBar*, int> EventHandle_ScrollBarPtrSizeT;// expand by genesis-3d
class MYGUI_EXPORT ScrollBar : class MYGUI_EXPORT ScrollBar :
public Widget, public Widget,
@ -49,10 +50,10 @@ namespace MyGUI
/** Get scroll range */ /** Get scroll range */
size_t getScrollRange() const; size_t getScrollRange() const;
/** Set scroll position (value from 0 to range - 1) */
void setScrollPosition(size_t _value); void setScrollPosition(int _value, bool _force = false);// expand by genesis-3d
/** Get scroll position (value from 0 to range - 1) */
size_t getScrollPosition() const; int getScrollPosition() const;
/** Set scroll page /** Set scroll page
@param _value Tracker step when buttons pressed @param _value Tracker step when buttons pressed
@ -105,6 +106,12 @@ namespace MyGUI
/** @copydoc Widget::setCoord(int _left, int _top, int _width, int _height) */ /** @copydoc Widget::setCoord(int _left, int _top, int _width, int _height) */
void setCoord(int _left, int _top, int _width, int _height); void setCoord(int _left, int _top, int _width, int _height);
// expand by genesis-3d -------------------------------------------
void setLimitRange(bool _value);
bool getLimitRange() const;
// ----------------------------------------------------------------
/*events:*/ /*events:*/
/** Event : scroll tracker position changed.\n /** Event : scroll tracker position changed.\n
signature : void method(MyGUI::ScrollBar* _sender, size_t _position)\n signature : void method(MyGUI::ScrollBar* _sender, size_t _position)\n
@ -118,8 +125,9 @@ namespace MyGUI
virtual void initialiseOverride(); virtual void initialiseOverride();
virtual void shutdownOverride(); virtual void shutdownOverride();
void updatePreActionOffset();// expand by genesis-3d
void updateTrack(); void updateTrack();
void TrackMove(int _left, int _top); void TrackMove(int _left, int _top);// expand by genesis-3d
virtual void onMouseWheel(int _rel); virtual void onMouseWheel(int _rel);
@ -148,15 +156,19 @@ namespace MyGUI
size_t mSkinRangeStart; size_t mSkinRangeStart;
size_t mSkinRangeEnd; size_t mSkinRangeEnd;
size_t mScrollRange; int mScrollRange;
size_t mScrollPosition; //size_t mScrollPosition; old
size_t mScrollPage; // на сколько перещелкивать, при щелчке на кнопке int mScrollPosition;
size_t mScrollViewPage; // на сколько перещелкивать, при щелчке по полосе
int mScrollPage; // на сколько перещелкивать, при щелчке на кнопке
int mScrollViewPage; // на сколько перещелкивать, при щелчке по полосе
int mMinTrackSize; int mMinTrackSize;
bool mMoveToClick; bool mMoveToClick;
bool mVerticalAlignment; bool mVerticalAlignment;
bool mLimitRange;// expand by genesis-3d
}; };
} // namespace MyGUI } // namespace MyGUI

View File

@ -90,7 +90,7 @@ namespace MyGUI
void notifyMousePressed(Widget* _sender, int _left, int _top, MouseButton _id); void notifyMousePressed(Widget* _sender, int _left, int _top, MouseButton _id);
void notifyMouseReleased(Widget* _sender, int _left, int _top, MouseButton _id); void notifyMouseReleased(Widget* _sender, int _left, int _top, MouseButton _id);
void notifyScrollChangePosition(ScrollBar* _sender, size_t _position); void notifyScrollChangePosition(ScrollBar* _sender, int _position);// expand by genesis-3d
void notifyMouseWheel(Widget* _sender, int _rel); void notifyMouseWheel(Widget* _sender, int _rel);
void updateView(); void updateView();

View File

@ -54,8 +54,18 @@ namespace MyGUI
virtual Align getContentAlign(); virtual Align getContentAlign();
virtual void eraseContent(); virtual void eraseContent();
protected: protected:
void bindDrag();// expand by genesis-3d
bool dragClent(int _left, int _top, MouseButton _id);// expand by genesis-3d
bool isDraging() const;// expand by genesis-3d
void notifyClentPress(Widget* _sender, int _left, int _top, MouseButton _id);// expand by genesis-3d
void notifyClentRelease(Widget* _sender, int _left, int _top, MouseButton _id);// expand by genesis-3d
void notifyClentDrag(Widget* _sender, int _left, int _top, MouseButton _id);// expand by genesis-3d
void notifyClentLostFocus(Widget* _sender, Widget* _newFocus);// expand by genesis-3d
virtual void onClientDragBegin(Widget* _sender, int _left, int _top, MouseButton _id);// expand by genesis-3d
virtual void onClientDragEnd(Widget* _sender);// expand by genesis-3d
virtual void onClientDrag(Widget* _sender, int _left, int _top, MouseButton _id);// expand by genesis-3d
ScrollBar* mVScroll; ScrollBar* mVScroll;
ScrollBar* mHScroll; ScrollBar* mHScroll;
Widget* mClient; Widget* mClient;
@ -66,6 +76,9 @@ namespace MyGUI
size_t mVRange; size_t mVRange;
size_t mHRange; size_t mHRange;
// expand by genesis-3d
bool mDraging;
//----------------------------
// изменяется ли содержимое при ресайзе // изменяется ли содержимое при ресайзе
bool mChangeContentByResize; bool mChangeContentByResize;
}; };

View File

@ -298,7 +298,18 @@ namespace MyGUI
void Canvas::_setUVSet(const FloatRect& _rect) void Canvas::_setUVSet(const FloatRect& _rect)
{ {
if (nullptr != getSubWidgetMain()) if (nullptr != getSubWidgetMain())
getSubWidgetMain()->_setUVSet(_rect); {
if (VertexColourType::ColourABGR == RenderManager::getInstancePtr()->getVertexFormat())
{
FloatRect glrect(_rect.left, 1.0f - _rect.top, _rect.right, 1.0f - _rect.bottom);
getSubWidgetMain()->_setUVSet(glrect);
}
else
{
getSubWidgetMain()->_setUVSet(_rect);
}
}
} }
bool Canvas::isLocked() const bool Canvas::isLocked() const

View File

@ -94,10 +94,10 @@ namespace MyGUI
} }
} }
void DDContainer::mouseDrag(MouseButton _id) bool DDContainer::mouseDrag(MouseButton _id)// expand by genesis-3d
{ {
if (MouseButton::Left != _id) if (MouseButton::Left != _id)
return; return false;// expand by genesis-3d
// нужно ли обновить данные // нужно ли обновить данные
bool update = false; bool update = false;
@ -121,14 +121,17 @@ namespace MyGUI
else else
{ {
// сбрасываем фокус мыши (не обязательно) // сбрасываем фокус мыши (не обязательно)
InputManager::getInstance().resetMouseCaptureWidget();
// expand by genesis-3d
// reset or not logic move to item box
//InputManager::getInstance().resetMouseCaptureWidget();
} }
} }
// дроп не нужен // дроп не нужен
if (!mNeedDrop) if (!mNeedDrop)
{ {
return; return false;// expand by genesis-3d
} }
// делаем запрос, над кем наша мыша // делаем запрос, над кем наша мыша
@ -138,7 +141,8 @@ namespace MyGUI
updateDropItems(); updateDropItems();
// если равно, значит уже спрашивали // если равно, значит уже спрашивали
if (mOldDrop == item) return; if (mOldDrop == item)
return true;// expand by genesis-3d
mOldDrop = item; mOldDrop = item;
// сбрасываем старую подсветку // сбрасываем старую подсветку
@ -209,6 +213,7 @@ namespace MyGUI
updateDropItemsState(data); updateDropItemsState(data);
eventChangeDDState(this, state); eventChangeDDState(this, state);
return true;// expand by genesis-3d
} }
void DDContainer::endDrop(bool _reset) void DDContainer::endDrop(bool _reset)

View File

@ -1628,8 +1628,12 @@ namespace MyGUI
return Base::getTextSize(); return Base::getTextSize();
} }
void EditBox::notifyScrollChangePosition(ScrollBar* _sender, size_t _position) void EditBox::notifyScrollChangePosition(ScrollBar* _sender, int _position)// expand by genesis-3d
{ {
if (_position < 0)// expand by genesis-3d
{
_position = 0;
}
if (mClientText == nullptr) if (mClientText == nullptr)
return; return;

View File

@ -151,6 +151,11 @@ namespace MyGUI
return isFocus; return isFocus;
} }
return changeMouseFocus(item, old_mouse_focus, _absx, _absy, _absz);
}
bool InputManager::changeMouseFocus(Widget* item, Widget* old_mouse_focus, int _absx, int _absy, int _absz)
{
if (item) if (item)
{ {
// поднимаемся до рута // поднимаемся до рута
@ -474,6 +479,11 @@ namespace MyGUI
} }
} }
void InputManager::_forceChangeMouseFocus(Widget* _focusNew, int _absx, int _absy, int _absz)
{
changeMouseFocus(_focusNew, mWidgetMouseFocus, _absx, _absy, _absz);
}
// удаляем данный виджет из всех возможных мест // удаляем данный виджет из всех возможных мест
void InputManager::_unlinkWidget(Widget* _widget) void InputManager::_unlinkWidget(Widget* _widget)
{ {

View File

@ -31,6 +31,16 @@
namespace MyGUI namespace MyGUI
{ {
static const float gDragBias = 3.0f;
static const float gCriticalForceOverflow = 0.1f;
static const float gSpeedTime = 0.1f;
static const float gSpeedDown = 0.25f;
static const float gOverflowTime = 0.2f;
static const float gDefualSpeedWeight = 0.5f;
static const float gTinyTime = 0.001f;
static const float gCriticalSpeed = 2.0f;
static const float gSpeedLerpWeight = 0.8f;
ItemBox::ItemBox() : ItemBox::ItemBox() :
mCountItemInLine(0), mCountItemInLine(0),
@ -43,7 +53,12 @@ namespace MyGUI
mIndexRefuse(ITEM_NONE), mIndexRefuse(ITEM_NONE),
mIsFocus(false), mIsFocus(false),
mItemDrag(nullptr), mItemDrag(nullptr),
mAlignVert(true) mAlignVert(true),
mPreCoord(0.0f),
mTimeCounter(0.0f),
mScrollSpeed(0.0f),
mMoveCounter(0.0f),
mScrollState(ScrollStop)
{ {
mChangeContentByResize = true; mChangeContentByResize = true;
} }
@ -83,23 +98,40 @@ namespace MyGUI
// подписываем клиент для драгэндропа // подписываем клиент для драгэндропа
if (mClient != nullptr) if (mClient != nullptr)
{
mClient->_setContainer(this); mClient->_setContainer(this);
}
requestItemSize(); requestItemSize();
updateScrollSize(); updateScrollSize();
updateScrollPosition(); updateScrollPosition();
// expand by genesis-3d
Gui::getInstancePtr()->eventFrameStart += newDelegate(this, &ItemBox::notifyTick);
bindDrag();
if (mHScroll != nullptr)
{
mHScroll->setLimitRange(true);
mHScroll->eventMouseButtonPressed += newDelegate(this, & ItemBox::notifyScrollBarPress);
}
if (mVScroll != nullptr)
{
mVScroll->setLimitRange(true);
mVScroll->eventMouseButtonPressed += newDelegate(this, & ItemBox::notifyScrollBarPress);
}
} }
void ItemBox::shutdownOverride() void ItemBox::shutdownOverride()
{ {
Gui::getInstancePtr()->eventFrameStart -= newDelegate(this, &ItemBox::notifyTick);// expand by genesis-3d
mVScroll = nullptr; mVScroll = nullptr;
mHScroll = nullptr; mHScroll = nullptr;
mClient = nullptr; mClient = nullptr;
Base::shutdownOverride(); Base::shutdownOverride();
} }
void ItemBox::setPosition(const IntPoint& _point) void ItemBox::setPosition(const IntPoint& _point)
{ {
Base::setPosition(_point); Base::setPosition(_point);
@ -151,24 +183,41 @@ namespace MyGUI
count_visible = (_getClientWidget()->getWidth() / mSizeItem.width) + 2; count_visible = (_getClientWidget()->getWidth() / mSizeItem.width) + 2;
} }
size_t start = (mFirstVisibleIndex * mCountItemInLine); int start = getStartIndex();
size_t count = (count_visible * mCountItemInLine) + start; int count = (count_visible * mCountItemInLine) + (mFirstVisibleIndex * mCountItemInLine);//start;
size_t index = 0; int bias = 0;// expand by genesis-3d
for (size_t pos = start; pos < count; ++pos, ++index) if (mFirstVisibleIndex < 0)// expand by genesis-3d
{
if (mAlignVert)
{
bias = -mFirstVisibleIndex * mSizeItem.height;
}
else
{
bias = -mFirstVisibleIndex * mSizeItem.width;
}
start = 0;
}
int index = 0;
for (int pos = start; pos < count; ++pos, ++index)
{ {
// дальше нет айтемов // дальше нет айтемов
if (pos >= mItemsInfo.size()) break; if (pos >= (int)mItemsInfo.size())
{
break;
}
Widget* item = getItemWidget(index); Widget* item = getItemWidget(index);
if (mAlignVert) if (mAlignVert)
{ {
item->setPosition(((int)index % mCountItemInLine) * mSizeItem.width - mContentPosition.left, item->setPosition(((int)index % mCountItemInLine) * mSizeItem.width - mContentPosition.left,
(((int)index / mCountItemInLine) * mSizeItem.height) - mFirstOffsetIndex); (((int)index / mCountItemInLine) * mSizeItem.height) - mFirstOffsetIndex + bias);
} }
else else
{ {
item->setPosition((((int)index / mCountItemInLine) * mSizeItem.width) - mFirstOffsetIndex, item->setPosition((((int)index / mCountItemInLine) * mSizeItem.width) - mFirstOffsetIndex + bias,
((int)index % mCountItemInLine) * mSizeItem.height - mContentPosition.top); ((int)index % mCountItemInLine) * mSizeItem.height - mContentPosition.top);
} }
@ -184,7 +233,7 @@ namespace MyGUI
} }
// все виджеты еще есть, то их надо бы скрыть // все виджеты еще есть, то их надо бы скрыть
while (index < mVectorItems.size()) while (index < (int)mVectorItems.size())
{ {
mVectorItems[index]->setVisible(false); mVectorItems[index]->setVisible(false);
index ++; index ++;
@ -251,7 +300,7 @@ namespace MyGUI
// сбрасываем старую подсветку // сбрасываем старую подсветку
if (mIndexActive != ITEM_NONE) if (mIndexActive != ITEM_NONE)
{ {
size_t start = (size_t)(mFirstVisibleIndex * mCountItemInLine); size_t start = (size_t)getStartIndex();
size_t index = mIndexActive; size_t index = mIndexActive;
mIndexActive = ITEM_NONE; mIndexActive = ITEM_NONE;
@ -319,7 +368,7 @@ namespace MyGUI
mIndexAccept = (_set && _accept ) ? _index : ITEM_NONE; mIndexAccept = (_set && _accept ) ? _index : ITEM_NONE;
mIndexRefuse = (_set && !_accept) ? _index : ITEM_NONE; mIndexRefuse = (_set && !_accept) ? _index : ITEM_NONE;
size_t start = (size_t)(mFirstVisibleIndex * mCountItemInLine); size_t start = (size_t)getStartIndex();
if ((_index >= start) && (_index < (start + mVectorItems.size()))) if ((_index >= start) && (_index < (start + mVectorItems.size())))
{ {
IBDrawItemInfo data(_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse, false, false); IBDrawItemInfo data(_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse, false, false);
@ -332,7 +381,7 @@ namespace MyGUI
MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ItemBox::setItemData"); MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ItemBox::setItemData");
mItemsInfo[_index].data = _data; mItemsInfo[_index].data = _data;
size_t start = (size_t)(mFirstVisibleIndex * mCountItemInLine); size_t start = (size_t)getStartIndex();
if ((_index >= start) && (_index < (start + mVectorItems.size()))) if ((_index >= start) && (_index < (start + mVectorItems.size())))
{ {
IBDrawItemInfo data(_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse, true, false); IBDrawItemInfo data(_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse, true, false);
@ -421,7 +470,7 @@ namespace MyGUI
{ {
MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ItemBox::redrawItemAt"); MYGUI_ASSERT_RANGE(_index, mItemsInfo.size(), "ItemBox::redrawItemAt");
size_t start = (size_t)(mFirstVisibleIndex * mCountItemInLine); size_t start = (size_t)getStartIndex();
if ((_index >= start) && (_index < (start + mVectorItems.size()))) if ((_index >= start) && (_index < (start + mVectorItems.size())))
{ {
IBDrawItemInfo data(_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse, true, false); IBDrawItemInfo data(_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse, true, false);
@ -434,7 +483,7 @@ namespace MyGUI
MYGUI_ASSERT_RANGE_AND_NONE(_index, mItemsInfo.size(), "ItemBox::setIndexSelected"); MYGUI_ASSERT_RANGE_AND_NONE(_index, mItemsInfo.size(), "ItemBox::setIndexSelected");
if (_index == mIndexSelect) return; if (_index == mIndexSelect) return;
size_t start = (size_t)(mFirstVisibleIndex * mCountItemInLine); size_t start = (size_t)getStartIndex();
// сбрасываем старое выделение // сбрасываем старое выделение
if (mIndexSelect != ITEM_NONE) if (mIndexSelect != ITEM_NONE)
@ -604,13 +653,24 @@ namespace MyGUI
void ItemBox::notifyMouseDrag(Widget* _sender, int _left, int _top, MouseButton _id) void ItemBox::notifyMouseDrag(Widget* _sender, int _left, int _top, MouseButton _id)
{ {
mouseDrag(_id); // expand by genesis-3d
if(mouseDrag(_id))
{
}
else if (dragClent(_left, _top, _id))
{
}
else
{
InputManager::getInstance().resetMouseCaptureWidget();
}
} }
void ItemBox::notifyMouseButtonPressed(Widget* _sender, int _left, int _top, MouseButton _id) void ItemBox::notifyMouseButtonPressed(Widget* _sender, int _left, int _top, MouseButton _id)
{ {
mouseButtonPressed(_id); DDContainer::mouseButtonPressed(_id);
scrollStop();
if ( MouseButton::Left == _id) if ( MouseButton::Left == _id)
{ {
size_t old = mIndexSelect; size_t old = mIndexSelect;
@ -645,6 +705,11 @@ namespace MyGUI
{ {
bool needEvent = !mStartDrop; bool needEvent = !mStartDrop;
mouseButtonReleased(_id); mouseButtonReleased(_id);
if (!isDraging())
{
preDrag();
checkScrollState();
}
if (needEvent) if (needEvent)
eventNotifyItem(this, IBNotifyItemData(getIndexByWidget(_sender), IBNotifyItemData::MouseReleased, _left, _top, _id)); eventNotifyItem(this, IBNotifyItemData(getIndexByWidget(_sender), IBNotifyItemData::MouseReleased, _left, _top, _id));
@ -652,6 +717,11 @@ namespace MyGUI
void ItemBox::notifyRootMouseChangeFocus(Widget* _sender, bool _focus) void ItemBox::notifyRootMouseChangeFocus(Widget* _sender, bool _focus)
{ {
if (isDraging())
{
return;
}
size_t index = calcIndexByWidget(_sender); size_t index = calcIndexByWidget(_sender);
if (_focus) if (_focus)
{ {
@ -660,10 +730,15 @@ namespace MyGUI
// сбрасываем старый // сбрасываем старый
if (mIndexActive != ITEM_NONE) if (mIndexActive != ITEM_NONE)
{ {
size_t old_index = mIndexActive; int old_index = (int)mIndexActive;
mIndexActive = ITEM_NONE; mIndexActive = ITEM_NONE;
IBDrawItemInfo data(old_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse, false, false); IBDrawItemInfo data(old_index, mIndexSelect, mIndexActive, mIndexAccept, mIndexRefuse, false, false);
requestDrawItem(this, mVectorItems[old_index - (mFirstVisibleIndex * mCountItemInLine)], data); int index = old_index - getStartIndex();// expand by genesis-3d
if (0 <= index && index < (int)mVectorItems.size())
{
requestDrawItem(this, mVectorItems[old_index - getStartIndex()], data);
}
} }
mIndexActive = index; mIndexActive = index;
@ -714,7 +789,7 @@ namespace MyGUI
} }
} }
void ItemBox::notifyScrollChangePosition(ScrollBar* _sender, size_t _index) void ItemBox::notifyScrollChangePosition(ScrollBar* _sender, int _index)
{ {
if (_sender == mVScroll) if (_sender == mVScroll)
{ {
@ -730,6 +805,15 @@ namespace MyGUI
void ItemBox::notifyMouseWheel(Widget* _sender, int _rel) void ItemBox::notifyMouseWheel(Widget* _sender, int _rel)
{ {
if (mDraging)// expand by genesis-3d
{
return;
}
if (ScrollStop != mScrollState)// expand by genesis-3d
{
scrollStop();
}
if (mAlignVert) if (mAlignVert)
{ {
if (mContentSize.height <= 0) return; if (mContentSize.height <= 0) return;
@ -787,7 +871,455 @@ namespace MyGUI
if (nullptr != mHScroll) mHScroll->setScrollPosition(mContentPosition.left); if (nullptr != mHScroll) mHScroll->setScrollPosition(mContentPosition.left);
} }
void ItemBox::setContentPosition(const IntPoint& _point) //------------------------------------------------------------------------------//
// expand by genesis-3d
void ItemBox::setVScrollVisible(bool _value)
{
mVisibleVScroll = _value;
updateScrollSize();
updateScrollPosition();
}
int ItemBox::getStartIndex() const
{
if (mFirstVisibleIndex > 0)
{
return mFirstVisibleIndex * mCountItemInLine;
}
else
{
return 0;
}
}
void ItemBox::setHScrollVisible(bool _value)
{
mVisibleHScroll = _value;
updateScrollSize();
updateScrollPosition();
}
bool ItemBox::isVScrollVisible() const
{
return mVisibleVScroll;
}
bool ItemBox::isHScrollVisible() const
{
return mVisibleHScroll;
}
inline float __lerp(float x, float y, float scale)
{
return x + (y - x) * scale;
}
inline float __abs(float x)
{
if (x < 0)
{
return -x;
}
return x;
}
inline float __dragLerp(float overflow, float length, float preCoord, float currentCoord)
{
float scale = overflow / (float)length;
if (scale >= 1.0f)
{
return preCoord;
}
return __lerp(currentCoord, preCoord, scale);
}
float ItemBox::defualtSpeed() const
{
float len = mAlignVert ? (float)mSizeItem.height : (float)mSizeItem.width;
return len * gDefualSpeedWeight;
}
bool ItemBox::headEmpty() const
{
return (mPreCoord < 0.0f);
}
bool ItemBox::tailEmpty() const
{
float sizeItem = mAlignVert ? (float)mSizeItem.height : (float)mSizeItem.width;
float clientSize = mAlignVert ? (float)mClient->getHeight() : (float)mClient->getWidth();
float button = clientSize - (sizeItem * mCountLines - mPreCoord);
return (button > 0.0f); //button empty.
}
int ItemBox::dragOperator(int _current, int _length, int _sizeItem)
{
float bias = (float)(_current - mPreMouse); // mouse move.
if (bias > gDragBias || gDragBias < -bias)
{
resetCurrentActiveItem();
}
float out = mPreCoord - bias; // new content pos.
if (out < 0.0f)// headEmpty.
{
if (bias > 0.0f)
{
out = __dragLerp(-out, (float)_length, mPreCoord, out);
}
}
else
{
float button = _length - (_sizeItem * mCountLines - out);
if (button > 0.0f) //tailEmpty.
{
if (bias < 0.0f)
{
out = __dragLerp(button, (float)_length, mPreCoord, out);
}
}
}
dragMove(out - mPreCoord);
mPreCoord = out;
mPreMouse = _current;
return (int)out;
}
void ItemBox::onClientDragBegin(Widget* _sender, int _left, int _top, MouseButton _id)
{
preDrag();
ScrollViewBase::onClientDragBegin(_sender, _left, _top, _id);
}
void ItemBox::onClientDragEnd(Widget* _sender)
{
checkScrollState();
ScrollViewBase::onClientDragEnd(_sender);
}
void ItemBox::onClientDrag(Widget* _sender, int _left, int _top, MouseButton _id)
{
if (MouseButton::Left == _id)
{
if (mAlignVert)
{
mContentPosition.top = dragOperator(_top, mClient->getHeight(), mSizeItem.height);
}
else
{
mContentPosition.left = dragOperator(_left, mClient->getWidth(), mSizeItem.width);
}
updateContentPosition(mContentPosition);
if (nullptr != mVScroll) mVScroll->setScrollPosition(mContentPosition.top, true);
if (nullptr != mHScroll) mHScroll->setScrollPosition(mContentPosition.left, true);
}
}
void ItemBox::notifyScrollBarPress(Widget* _sender, int _left, int _top, MouseButton _id)
{
if (ScrollInertia == mScrollState && _id == MouseButton::Left)
{
scrollStop();
}
}
void ItemBox::pushContentPosition()
{
if (mAlignVert)
{
mContentPosition.top = (int)mPreCoord;
}
else
{
mContentPosition.left = (int)mPreCoord;
}
updateContentPosition(mContentPosition);
if (nullptr != mVScroll) mVScroll->setScrollPosition(mContentPosition.top, true);
if (nullptr != mHScroll) mHScroll->setScrollPosition(mContentPosition.left, true);
}
void ItemBox::finalSpeed()
{
if (mTimeCounter > gSpeedTime)
{
testSpeed();
}
else if (mTimeCounter > gTinyTime)
{
float speed = mMoveCounter / gSpeedTime;
float mini = speed * gSpeedLerpWeight;
mScrollSpeed = __lerp(mScrollSpeed, speed, gSpeedLerpWeight * (mTimeCounter / gSpeedTime));
if (__abs(mScrollSpeed) < __abs(mini))
{
mScrollSpeed = mini;
}
}
else
{
resetCounter();
}
}
void ItemBox::resetCounter()
{
mTimeCounter = 0.0f;
mMoveCounter = 0.0f;
}
void ItemBox::testSpeed()
{
float speed = mMoveCounter / gSpeedTime;
mScrollSpeed = __lerp(mScrollSpeed, speed, gSpeedLerpWeight);
resetCounter();
}
void ItemBox::dragMove(float move)
{
mMoveCounter += move;
}
void ItemBox::checkScrollState()
{
finalSpeed();
resetCounter();
if (headEmpty())
{
mScrollState = ScrollOverflow;
}
else
{
if (tailEmpty())
{
mScrollState = ScrollOverflow;
}
else
{
float defualt_speed = defualtSpeed();
if (-defualt_speed < mScrollSpeed && mScrollSpeed < defualt_speed)
{
mScrollState = ScrollStop;
mScrollSpeed = 0.0f;
}
else
{
mScrollState = ScrollInertia;
}
}
}
}
void ItemBox::preDrag()
{
const IntPoint& point = InputManager::getInstance().getLastPressedPosition(MouseButton::Left);
if (mAlignVert)
{
mPreCoord = (float)mContentPosition.top;
mPreMouse = point.top;
}
else
{
mPreCoord = (float)mContentPosition.left;
mPreMouse = point.left;
}
scrollStop();
}
void ItemBox::scrollStop()
{
resetCounter();
mScrollSpeed = 0.0f;
mScrollState = ScrollStop;
}
void ItemBox::scrollOverflow(float time)
{
mTimeCounter += time;
if (headEmpty())
{
if (mTimeCounter < gOverflowTime)
{
float coord = mPreCoord;
mPreCoord = __lerp(mPreCoord, 0, mTimeCounter / gOverflowTime);
pushContentPosition();
mPreCoord = coord;
}
else
{
mPreCoord = 0;
pushContentPosition();
scrollStop();
}
}
else
{
float sizeItem = mAlignVert ? (float)mSizeItem.height : (float)mSizeItem.width;
float clientSize = mAlignVert ? (float)mClient->getHeight() : (float)mClient->getWidth();
float head = (sizeItem * mCountLines) - clientSize;
if (head < 0.0f)
{
head = 0.0f;
}
if (mTimeCounter < gOverflowTime)
{
float coord = mPreCoord;
mPreCoord = __lerp(mPreCoord, head, mTimeCounter / gOverflowTime);
pushContentPosition();
mPreCoord = coord;
}
else
{
mPreCoord = head;
pushContentPosition();
scrollStop();
}
}
}
void ItemBox::scrollForceOverflow(float time)
{
mTimeCounter += time;
if (mTimeCounter > gOverflowTime)
{
time = gOverflowTime - (mTimeCounter - time);
mPreCoord += mScrollSpeed * time;
resetCounter();
mScrollState = ScrollOverflow;
}
else
{
mPreCoord += mScrollSpeed * time;
float clientSize = mAlignVert ? (float)mClient->getHeight() : (float)mClient->getWidth();
float limit = clientSize * gCriticalForceOverflow;
if (mPreCoord < -limit)
{
mPreCoord = -limit;
resetCounter();
mScrollState = ScrollOverflow;
}
else
{
float sizeItem = mAlignVert ? (float)mSizeItem.height : (float)mSizeItem.width;
float head = (sizeItem * mCountLines) - clientSize;
if (mPreCoord - head > limit)
{
mPreCoord = head + limit;
}
}
}
pushContentPosition();
}
void ItemBox::scrollInertia(float time)
{
float weight = 1.0f - mTimeCounter * gSpeedDown;
if (weight > 0.0f)
{
float speed = mScrollSpeed * weight;
if (-gCriticalSpeed < speed && speed < gCriticalSpeed)
{
scrollStop();
}
else
{
mTimeCounter += time;
mPreCoord += speed * time;
pushContentPosition();
if (headEmpty())
{
mScrollState = ScrollForceOverflow;
mScrollSpeed = speed;
resetCounter();
}
else if (tailEmpty())
{
mScrollState = ScrollForceOverflow;
mScrollSpeed = speed;
resetCounter();
}
}
}
}
void ItemBox::notifyTick(float time)
{
if (isDraging())
{
mTimeCounter += time;
if (mTimeCounter > gSpeedTime)
{
testSpeed();
}
}
else
{
switch(mScrollState)
{
case ScrollInertia:
{
scrollInertia(time);
break;
}
case ScrollForceOverflow:
{
scrollForceOverflow(time);
break;
}
case ScrollOverflow:
{
scrollOverflow(time);
break;
}
default:
break;
}
}
}
inline int _offset_check(int a, int b)
{
if (a < 0)
{
int t = (-a) % b;
return b - t;
}
else
{
return a % b;
}
}
inline int _index_check(int a, int b)
{
if (a < 0)
{
return (int)(a / (float)b) - 1;
}
else
{
return a / b;
}
}
//------------------------------------------------------------------------------//
void ItemBox::updateContentPosition(const IntPoint& _point)
{ {
mContentPosition = _point; mContentPosition = _point;
@ -795,19 +1327,24 @@ namespace MyGUI
if (mAlignVert) if (mAlignVert)
{ {
mFirstVisibleIndex = mContentPosition.top / mSizeItem.height; mFirstVisibleIndex = _index_check(mContentPosition.top , mSizeItem.height); // expand by genesis-3d
mFirstOffsetIndex = mContentPosition.top % mSizeItem.height; mFirstOffsetIndex = _offset_check(mContentPosition.top , mSizeItem.height); // expand by genesis-3d
} }
else else
{ {
mFirstVisibleIndex = mContentPosition.left / mSizeItem.width; mFirstVisibleIndex = _index_check(mContentPosition.left , mSizeItem.width); // expand by genesis-3d
mFirstOffsetIndex = mContentPosition.left % mSizeItem.width; mFirstOffsetIndex = _offset_check(mContentPosition.left , mSizeItem.width); // expand by genesis-3d
} }
_updateAllVisible(old != mFirstVisibleIndex); _updateAllVisible(old != mFirstVisibleIndex);
_resetContainer(true); _resetContainer(true);
} }
void ItemBox::setContentPosition(const IntPoint& _point)
{
updateContentPosition(_point);
}
void ItemBox::redrawAllItems() void ItemBox::redrawAllItems()
{ {
_updateAllVisible(true); _updateAllVisible(true);
@ -820,7 +1357,7 @@ namespace MyGUI
size_t ItemBox::calcIndexByWidget(Widget* _widget) size_t ItemBox::calcIndexByWidget(Widget* _widget)
{ {
return *_widget->_getInternalData<size_t>() + (mFirstVisibleIndex * mCountItemInLine); return *_widget->_getInternalData<size_t>() + getStartIndex();
} }
IntSize ItemBox::getContentSize() IntSize ItemBox::getContentSize()
@ -922,6 +1459,14 @@ namespace MyGUI
{ {
if (_key == "VerticalAlignment") if (_key == "VerticalAlignment")
setVerticalAlignment(utility::parseValue<bool>(_value)); setVerticalAlignment(utility::parseValue<bool>(_value));
else if (_key == "HScrollVisible")
{
setHScrollVisible(utility::parseValue<bool>(_value));
}
else if (_key == "VScrollVisible")
{
setVScrollVisible(utility::parseValue<bool>(_value));
}
else else
{ {
Base::setPropertyOverride(_key, _value); Base::setPropertyOverride(_key, _value);

View File

@ -238,8 +238,12 @@ namespace MyGUI
_resetContainer(true); _resetContainer(true);
} }
void ListBox::notifyScrollChangePosition(ScrollBar* _sender, size_t _position) void ListBox::notifyScrollChangePosition(ScrollBar* _sender, int _position)// expand by genesis-3d
{ {
if (_position < 0)// expand by genesis-3d
{
_position = 0;
}
_setScrollView(_position); _setScrollView(_position);
_sendEventChangeScroll(_position); _sendEventChangeScroll(_position);
} }

View File

@ -45,7 +45,8 @@ namespace MyGUI
mScrollViewPage(0), mScrollViewPage(0),
mMinTrackSize(0), mMinTrackSize(0),
mMoveToClick(false), mMoveToClick(false),
mVerticalAlignment(true) mVerticalAlignment(true),
mLimitRange(true)
{ {
} }
@ -147,7 +148,13 @@ namespace MyGUI
mWidgetTrack->setVisible(true); mWidgetTrack->setVisible(true);
// и обновляем позицию // и обновляем позицию
pos = (int)(((size_t)(pos - getTrackSize()) * mScrollPosition) / (mScrollRange - 1) + mSkinRangeStart); //pos = (int)(((size_t)(pos - getTrackSize()) * mScrollPosition) / (mScrollRange - 1) + mSkinRangeStart); old code
// expand by genesis-3d
int bias = (pos - getTrackSize()) * mScrollPosition;
int result = (int)(bias / (float)(mScrollRange - 1));
pos = result + mSkinRangeStart;
// ---------------------------------------------------------------------------------
mWidgetTrack->setPosition(mWidgetTrack->getLeft(), pos); mWidgetTrack->setPosition(mWidgetTrack->getLeft(), pos);
if (nullptr != mWidgetFirstPart) if (nullptr != mWidgetFirstPart)
@ -179,7 +186,13 @@ namespace MyGUI
mWidgetTrack->setVisible(true); mWidgetTrack->setVisible(true);
// и обновляем позицию // и обновляем позицию
pos = (int)(((size_t)(pos - getTrackSize()) * mScrollPosition) / (mScrollRange - 1) + mSkinRangeStart); //pos = (int)(((size_t)(pos - getTrackSize()) * mScrollPosition) / (mScrollRange - 1) + mSkinRangeStart); old code
// expand by genesis-3d
int bias = (pos - getTrackSize()) * mScrollPosition;
int result = (int)(bias / (float)(mScrollRange - 1));
pos = result + mSkinRangeStart;
// ---------------------------------------------------------------------------------
mWidgetTrack->setPosition(pos, mWidgetTrack->getTop()); mWidgetTrack->setPosition(pos, mWidgetTrack->getTop());
if (nullptr != mWidgetFirstPart) if (nullptr != mWidgetFirstPart)
@ -196,7 +209,27 @@ namespace MyGUI
} }
} }
void ScrollBar::TrackMove(int _left, int _top) void ScrollBar::updatePreActionOffset()
{
mPreActionOffset.left = mWidgetTrack->getLeft();
mPreActionOffset.top = mWidgetTrack->getTop();
}
void ScrollBar::setLimitRange(bool _value)
{
mLimitRange = _value;
}
bool ScrollBar::getLimitRange() const
{
return mLimitRange;
}
// ----------------------------------------------------------------------
void ScrollBar::TrackMove(int _left, int _top)// expand by genesis-3d
{ {
if (mWidgetTrack == nullptr) if (mWidgetTrack == nullptr)
return; return;
@ -206,11 +239,19 @@ namespace MyGUI
if (mVerticalAlignment) if (mVerticalAlignment)
{ {
// расчитываем позицию виджета // расчитываем позицию виджета
int start = mPreActionOffset.top + (_top - point.top); //int start = mPreActionOffset.top + (_top - point.top); // old code.
if (start < (int)mSkinRangeStart)
start = (int)mSkinRangeStart; // expand by genesis-3d
else if (start > (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getHeight())) int bias = (_top - point.top);
start = (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getHeight()); int start = (mPreActionOffset.top + bias);
// -----------------------------------
if (mLimitRange)// expand by genesis-3d
{
if (start < (int)mSkinRangeStart)
start = (int)mSkinRangeStart;
else if (start > (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getHeight()))
start = (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getHeight());
}
if (mWidgetTrack->getTop() != start) if (mWidgetTrack->getTop() != start)
mWidgetTrack->setPosition(mWidgetTrack->getLeft(), start); mWidgetTrack->setPosition(mWidgetTrack->getLeft(), start);
@ -221,23 +262,34 @@ namespace MyGUI
pos = pos * (int)(mScrollRange - 1) / (getLineSize() - getTrackSize()); pos = pos * (int)(mScrollRange - 1) / (getLineSize() - getTrackSize());
// проверяем на выходы и изменения // проверяем на выходы и изменения
if (pos < 0) if (mLimitRange)// expand by genesis-3d
pos = 0; {
else if (pos >= (int)mScrollRange) if (pos < 0)
pos = (int)mScrollRange - 1; pos = 0;
if (pos == (int)mScrollPosition) else if (pos >= (int)mScrollRange)
return; pos = (int)mScrollRange - 1;
if (pos == (int)mScrollPosition)
return;
}
mScrollPosition = pos; mScrollPosition = pos;
} }
else else
{ {
// расчитываем позицию виджета // расчитываем позицию виджета
int start = mPreActionOffset.left + (_left - point.left); //int start = mPreActionOffset.left + (_left - point.left);// old code.
if (start < (int)mSkinRangeStart)
start = (int)mSkinRangeStart; // expand by genesis-3d
else if (start > (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getWidth())) int bias = (_left - point.left);
start = (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getWidth()); int start = (mPreActionOffset.left + bias);
// -----------------------------------
if (mLimitRange)// expand by genesis-3d
{
if (start < (int)mSkinRangeStart)
start = (int)mSkinRangeStart;
else if (start > (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getWidth()))
start = (getTrackPlaceLength() - (int)mSkinRangeEnd - mWidgetTrack->getWidth());
}
if (mWidgetTrack->getLeft() != start) if (mWidgetTrack->getLeft() != start)
mWidgetTrack->setPosition(IntPoint(start, mWidgetTrack->getTop())); mWidgetTrack->setPosition(IntPoint(start, mWidgetTrack->getTop()));
@ -248,12 +300,16 @@ namespace MyGUI
pos = pos * (int)(mScrollRange - 1) / (getLineSize() - getTrackSize()); pos = pos * (int)(mScrollRange - 1) / (getLineSize() - getTrackSize());
// проверяем на выходы и изменения // проверяем на выходы и изменения
if (pos < 0)
pos = 0; if (mLimitRange)// expand by genesis-3d
else if (pos >= (int)mScrollRange) {
pos = (int)mScrollRange - 1; if (pos < 0)
if (pos == (int)mScrollPosition) pos = 0;
return; else if (pos >= (int)mScrollRange)
pos = (int)mScrollRange - 1;
if (pos == (int)mScrollPosition)
return;
}
mScrollPosition = pos; mScrollPosition = pos;
} }
@ -354,8 +410,7 @@ namespace MyGUI
} }
else if (_sender == mWidgetTrack) else if (_sender == mWidgetTrack)
{ {
mPreActionOffset.left = _sender->getLeft(); updatePreActionOffset();// expand by genesis-3d
mPreActionOffset.top = _sender->getTop();
} }
} }
@ -380,13 +435,19 @@ namespace MyGUI
updateTrack(); updateTrack();
} }
void ScrollBar::setScrollPosition(size_t _position) void ScrollBar::setScrollPosition(int _position, bool _force)
{ {
if (_position == mScrollPosition) if (_position == mScrollPosition)
return; return;
if (mLimitRange && !_force)
{
if (_position < 0)
_position = 0;
if (_position >= mScrollRange)
_position = 0;
}
if (_position >= mScrollRange)
_position = 0;
mScrollPosition = _position; mScrollPosition = _position;
updateTrack(); updateTrack();
@ -500,7 +561,7 @@ namespace MyGUI
return mScrollRange; return mScrollRange;
} }
size_t ScrollBar::getScrollPosition() const int ScrollBar::getScrollPosition() const
{ {
return mScrollPosition; return mScrollPosition;
} }

View File

@ -103,8 +103,12 @@ namespace MyGUI
updateView(); updateView();
} }
void ScrollView::notifyScrollChangePosition(ScrollBar* _sender, size_t _position) void ScrollView::notifyScrollChangePosition(ScrollBar* _sender, int _position)// expand by genesis-3d
{ {
if (_position < 0)// expand by genesis-3d
{
_position = 0;
}
if (mRealClient == nullptr) if (mRealClient == nullptr)
return; return;

View File

@ -23,6 +23,7 @@
#include "MyGUI_Precompiled.h" #include "MyGUI_Precompiled.h"
#include "MyGUI_ScrollViewBase.h" #include "MyGUI_ScrollViewBase.h"
#include "MyGUI_ScrollBar.h" #include "MyGUI_ScrollBar.h"
#include "MyGUI_InputManager.h"
namespace MyGUI namespace MyGUI
{ {
@ -35,7 +36,8 @@ namespace MyGUI
mVisibleVScroll(true), mVisibleVScroll(true),
mVRange(0), mVRange(0),
mHRange(0), mHRange(0),
mChangeContentByResize(false) mChangeContentByResize(false),
mDraging(false)
{ {
} }
@ -53,7 +55,8 @@ namespace MyGUI
IntSize viewSize = getViewSize(); IntSize viewSize = getViewSize();
// вертикальный контент не помещается // вертикальный контент не помещается
if (contentSize.height > viewSize.height) //if (contentSize.height > viewSize.height) old code.
if (contentSize.height > viewSize.height && mVisibleVScroll) // expand by genesis-3d
{ {
if (mVScroll != nullptr) if (mVScroll != nullptr)
{ {
@ -141,7 +144,8 @@ namespace MyGUI
// горизонтальный контент не помещается // горизонтальный контент не помещается
if (contentSize.width > viewSize.width) //if (contentSize.width > viewSize.width) old code.
if (contentSize.width > viewSize.width && mVisibleHScroll) // expand by genesis-3d
{ {
if (mHScroll != nullptr) if (mHScroll != nullptr)
{ {
@ -364,4 +368,77 @@ namespace MyGUI
{ {
} }
void ScrollViewBase::bindDrag()
{
if (mClient != nullptr)
{
mClient->eventMouseDrag += newDelegate(this, &ScrollViewBase::notifyClentDrag);
mClient->eventMouseButtonPressed += newDelegate(this, &ScrollViewBase::notifyClentPress);
mClient->eventMouseButtonReleased += newDelegate(this, &ScrollViewBase::notifyClentRelease);
mClient->eventMouseLostFocus += newDelegate(this, &ScrollViewBase::notifyClentLostFocus);
}
}
bool ScrollViewBase::dragClent(int _left, int _top, MouseButton _id)
{
if (MouseButton::Left == _id)
{
if (mClient)
{
InputManager::getInstancePtr()->_forceChangeMouseFocus(mClient, _left, _top, 0);
mClient->eventMouseButtonPressed(mClient, _left, _top, _id);
return true;
}
}
return false;
}
bool ScrollViewBase::isDraging() const
{
return mDraging;
}
void ScrollViewBase::notifyClentPress(Widget* _sender, int _left, int _top, MouseButton _id)
{
onClientDragBegin(_sender, _left, _top, _id);
}
void ScrollViewBase::notifyClentDrag(Widget* _sender, int _left, int _top, MouseButton _id)
{
onClientDrag(_sender, _left, _top, _id);
}
void ScrollViewBase::notifyClentLostFocus(Widget* _sender, Widget* _newFocus)
{
if (mDraging)
{
onClientDragEnd(_sender);
}
}
void ScrollViewBase::notifyClentRelease(Widget* _sender, int _left, int _top, MouseButton _id)
{
if (mDraging)
{
onClientDragEnd(_sender);
}
}
void ScrollViewBase::onClientDrag(Widget* _sender, int _left, int _top, MouseButton _id)
{
}
void ScrollViewBase::onClientDragBegin(Widget* _sender, int _left, int _top, MouseButton _id)
{
mDraging = true;
}
void ScrollViewBase::onClientDragEnd(Widget* _sender)
{
mDraging = false;
}
} // namespace MyGUI } // namespace MyGUI

View File

@ -66,16 +66,14 @@ namespace MyGUI
delete mInputManager; delete mInputManager;
} }
void initialise( const std::string& _group, const std::string& _logName = MYGUI_PLATFORM_LOG_FILENAME) void initialise(int bufferWidth, int bufferHeight, const std::string& _group, const std::string& _logName = MYGUI_PLATFORM_LOG_FILENAME)
{ {
assert(!mIsInitialise); assert(!mIsInitialise);
mIsInitialise = true; mIsInitialise = true;
mRenderManager->setResolution(0, 0); mRenderManager->initialise(0, 0, bufferWidth, bufferHeight);
if (!_logName.empty()) if (!_logName.empty())
LogManager::getInstance().createDefaultSource(_logName); LogManager::getInstance().createDefaultSource(_logName);
mRenderManager->initialise();
mDataManager->initialise(_group); mDataManager->initialise(_group);
} }

View File

@ -33,8 +33,11 @@ THE SOFTWARE.
#include "MyGUI_IVertexBuffer.h" #include "MyGUI_IVertexBuffer.h"
#include "MyGUI_RenderManager.h" #include "MyGUI_RenderManager.h"
#include "graphicsystem/GraphicSystem.h"
#include "RenderSystem.h" namespace Graphic
{
class Material;
}
namespace MyGUI namespace MyGUI
{ {
@ -48,7 +51,7 @@ namespace MyGUI
public: public:
GenesisRenderManager(); GenesisRenderManager();
virtual ~GenesisRenderManager(); virtual ~GenesisRenderManager();
void initialise(); void initialise(int width, int height, int bufferWidth, int bufferHeight);
void shutdown(); void shutdown();
static GenesisRenderManager& getInstance(); static GenesisRenderManager& getInstance();
@ -89,20 +92,17 @@ namespace MyGUI
virtual bool checkTexture(ITexture* _texture); virtual bool checkTexture(ITexture* _texture);
#endif #endif
void setResolution(int width, int height);//0 means auto. void setResolution(int width, int height, int bufferWidth, int bufferHeight);//0 means auto.
void setResolution(const IntSize& size);//0 means auto.
const IntSize& getResolution() const; const IntSize& getResolution() const;
bool autoResolutionWidth() const; bool autoResolutionWidth() const;
bool autoResolutionHeight() const; bool autoResolutionHeight() const;
void windowResized(); void windowResized(int bufferWidth, int bufferHeight);
void windowResized(int w, int h); void deviceReseted(int bufferWidth, int bufferHeight);
void deviceReseted();
void renderGUI(); void renderGUI(float time);
bool getManualRender(); bool getManualRender();
@ -116,7 +116,7 @@ namespace MyGUI
private: private:
void resetViewSize(int w, int h); void resetViewSize(int bufferWidth, int bufferHeight);
void destroyAllResources(); void destroyAllResources();
void updateRenderInfo(); void updateRenderInfo();
@ -140,7 +140,6 @@ namespace MyGUI
void _checkShader(); void _checkShader();
void _beforeDraw(); void _beforeDraw();
GPtr<Graphic::Material> m_shader; GPtr<Graphic::Material> m_shader;
//GPtr<RenderBase::RenderStateObject> m_renderState;
RenderBase::GPUProgramHandle* m_shaderHandle; RenderBase::GPUProgramHandle* m_shaderHandle;
static Util::String s_resourcePath; static Util::String s_resourcePath;

View File

@ -38,6 +38,11 @@ THE SOFTWARE.
#include "core/singleton.h" #include "core/singleton.h"
#include "util/array.h" #include "util/array.h"
namespace Resources
{
class TextureResInfo;
}
namespace MyGUI namespace MyGUI
{ {
@ -96,15 +101,13 @@ namespace MyGUI
size_t mNumElemBytes; size_t mNumElemBytes;
ITextureInvalidateListener* mListener; ITextureInvalidateListener* mListener;
typedef unsigned char Byte; typedef unsigned char Byte;
size_t m_width; size_t m_width;
size_t m_height; size_t m_height;
TextureBuffer m_texStream; TextureBuffer m_texStream;
RenderBase::TextureHandle m_texHandle; GPtr<Resources::TextureResInfo> m_texRes;
static Util::String s_resourcePath;
bool m_bManualCreate; bool m_bManualCreate;
static Util::String s_resourcePath;
}; };
inline GenesisTexture::TextureBuffer& GenesisTexture::GetBuffer() inline GenesisTexture::TextureBuffer& GenesisTexture::GetBuffer()
@ -112,11 +115,6 @@ namespace MyGUI
return m_texStream; return m_texStream;
} }
inline RenderBase::TextureHandle GenesisTexture::GetTextureHandle() const
{
return m_texHandle;
}
class GenesisTextureMgr : public Core::RefCounted class GenesisTextureMgr : public Core::RefCounted
{ {

View File

@ -53,7 +53,7 @@ namespace MyGUI
public: public:
void AddVertexBuffer(GenesisVertexBuffer* const& pBuffer); void AddVertexBuffer(GenesisVertexBuffer* const& pBuffer);
void RemoveVertexBuffer(GenesisVertexBuffer* const& pBuffer);
void ResetAllBuffers() const; void ResetAllBuffers() const;
private: private:

View File

@ -28,6 +28,9 @@ THE SOFTWARE.
****************************************************************************/ ****************************************************************************/
#include "stdneb.h" #include "stdneb.h"
#include <cstring> #include <cstring>
#include "graphicsystem/GraphicSystem.h"
#include "MyGUI_GenesisRTTexture.h" #include "MyGUI_GenesisRTTexture.h"
#include "MyGUI_GenesisRenderManager.h" #include "MyGUI_GenesisRenderManager.h"

View File

@ -27,18 +27,21 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
****************************************************************************/ ****************************************************************************/
#include "stdneb.h" #include "stdneb.h"
#include "graphicsystem/GraphicSystem.h"
#include "rendersystem/RenderSystem.h"
#include "materialmaker/parser/GenesisShaderParser.h"
#include "foundation/io/ioserver.h"
#include "MyGUI_GenesisDataManager.h" #include "MyGUI_GenesisDataManager.h"
#include "MyGUI_GenesisRenderManager.h" #include "MyGUI_GenesisRenderManager.h"
#include "MyGUI_GenesisTexture.h" #include "MyGUI_GenesisTexture.h"
#include "MyGUI_GenesisVertexBuffer.h" #include "MyGUI_GenesisVertexBuffer.h"
#include "MyGUI_LogManager.h" #include "MyGUI_LogManager.h"
#include "MyGUI_GenesisDiagnostic.h" #include "MyGUI_GenesisDiagnostic.h"
#include "MyGUI_Timer.h"
#include "MyGUI_Gui.h" #include "MyGUI_Gui.h"
#include "MyGUI_GenesisInput.h" #include "MyGUI_GenesisInput.h"
#include "materialmaker/parser/GenesisShaderParser.h"
#include "foundation/io/ioserver.h"
#include "MyGUI_GenesisVertexBufferManager.h" #include "MyGUI_GenesisVertexBufferManager.h"
#include "MyGUI_GenesisTexture.h" #include "MyGUI_GenesisTexture.h"
@ -81,14 +84,14 @@ namespace MyGUI
m_shader = NULL; m_shader = NULL;
} }
void GenesisRenderManager::initialise() void GenesisRenderManager::initialise(int width, int height, int bufferWidth, int bufferHeight)
{ {
mIsInitialise = true; mIsInitialise = true;
windowResized();
_checkShader(); _checkShader();
m_VertexMgr = MyGUI::GenesisVertexBufferMgr::Create(); m_VertexMgr = MyGUI::GenesisVertexBufferMgr::Create();
m_TextureMgr = MyGUI::GenesisTextureMgr::Create(); m_TextureMgr = MyGUI::GenesisTextureMgr::Create();
setResolution(width, height, bufferWidth, bufferHeight);
} }
void GenesisRenderManager::shutdown() void GenesisRenderManager::shutdown()
@ -124,11 +127,11 @@ namespace MyGUI
delete _buffer; delete _buffer;
} }
void GenesisRenderManager::resetViewSize(int w, int h) void GenesisRenderManager::resetViewSize(int bufferWidth, int bufferHeight)
{ {
if (0 == mResolutionConfig.width) if (0 == mResolutionConfig.width)
{ {
mCurrentResolution.width = w; mCurrentResolution.width = bufferWidth;
} }
else else
{ {
@ -137,7 +140,7 @@ namespace MyGUI
if (0 == mResolutionConfig.height) if (0 == mResolutionConfig.height)
{ {
mCurrentResolution.height = h; mCurrentResolution.height = bufferHeight;
} }
else else
{ {
@ -146,36 +149,22 @@ namespace MyGUI
GenesisInputManager::getInstancePtr()->_setScreenSize((float)mCurrentResolution.width, (float)mCurrentResolution.height); GenesisInputManager::getInstancePtr()->_setScreenSize((float)mCurrentResolution.width, (float)mCurrentResolution.height);
} }
void GenesisRenderManager::setResolution(int width, int height) void GenesisRenderManager::setResolution(int width, int height, int bufferWidth, int bufferHeight)
{ {
mResolutionConfig.set(width, height); mResolutionConfig.set(width, height);
windowResized(); windowResized(bufferWidth, bufferHeight);
} }
void GenesisRenderManager::setResolution(const IntSize& size) void GenesisRenderManager::windowResized(int bufferWidth, int bufferHeight)
{ {
mResolutionConfig = size; resetViewSize(bufferWidth, bufferHeight);
windowResized();
}
void GenesisRenderManager::windowResized()
{
const RenderBase::DisplayMode& dm = GraphicSystem::Instance()->GetMainViewPortWindow()->GetDisplayMode();
resetViewSize(dm.GetWidth(), dm.GetHeight());
updateRenderInfo(); updateRenderInfo();
onResizeView(mCurrentResolution); onResizeView(mCurrentResolution);
} }
void GenesisRenderManager::windowResized(int w, int h) void GenesisRenderManager::deviceReseted(int bufferWidth, int bufferHeigh)
{ {
resetViewSize(w, h); windowResized(bufferWidth, bufferHeigh);
updateRenderInfo();
onResizeView(mCurrentResolution);
}
void GenesisRenderManager::deviceReseted()
{
windowResized();
m_VertexMgr->ResetAllBuffers(); m_VertexMgr->ResetAllBuffers();
m_TextureMgr->ReLoadManualTextures(); m_TextureMgr->ReLoadManualTextures();
@ -327,20 +316,13 @@ namespace MyGUI
return mCountBatch; return mCountBatch;
} }
void GenesisRenderManager::renderGUI() void GenesisRenderManager::renderGUI(float time)
{ {
Gui* gui = Gui::getInstancePtr(); Gui* gui = Gui::getInstancePtr();
if (gui == nullptr || nullptr == m_shaderHandle) if (gui == nullptr || nullptr == m_shaderHandle)
return; return;
static Timer timer; onFrameEvent(time);
static unsigned long last_time = timer.getMilliseconds();
unsigned long now_time = timer.getMilliseconds();
unsigned long time = now_time - last_time;
onFrameEvent((float)((double)(time) / (double)1000));
last_time = now_time;
_beforeDraw(); _beforeDraw();

View File

@ -93,7 +93,7 @@ namespace MyGUI
: mName(_name) : mName(_name)
, mGroup(_group) , mGroup(_group)
, mRenderTarget(nullptr) , mRenderTarget(nullptr)
, m_texHandle(NULL) , m_texRes(NULL)
, m_width(0) , m_width(0)
, m_height(0) , m_height(0)
, mNumElemBytes(0) , mNumElemBytes(0)
@ -130,25 +130,23 @@ namespace MyGUI
void GenesisTexture::destroy() void GenesisTexture::destroy()
{ {
//[zhongdaohuan 2012/12/12] 如果这个texture是由render target创建的那么这个texture的句柄应该由render target类来管理。
//现在的terender target还不能由mygui自己创建所以所有render target都是源于mygui外部
//所以现在不会因mygui而引发内存泄漏问题如果以后mygui内部自己也可以创建render target那么这里的逻辑应该重新评估。
if (nullptr == mRenderTarget) if (nullptr == mRenderTarget)
{ {
if (m_bManualCreate) if (m_bManualCreate)
{ {
if (m_texHandle.IsValid()) if (m_texRes->GetHandle())
{ {
GraphicSystem::Instance()->RemoveTexture(m_texHandle); GraphicSystem::Instance()->RemoveTexture(m_texRes->GetHandle());
m_texHandle = NULL; m_texRes = NULL;
} }
} }
GenesisTextureMgr::Instance()->RemoveManualTexture(this); GenesisTextureMgr::Instance()->RemoveManualTexture(this);
} }
m_texStream = NULL; m_texStream = NULL;
m_texRes = NULL;
mRenderTarget = nullptr; mRenderTarget = nullptr;
m_bManualCreate = false;
mNumElemBytes = 0; mNumElemBytes = 0;
mOriginalFormat = PixelFormat::Unknow; mOriginalFormat = PixelFormat::Unknow;
mOriginalUsage = TextureUsage::Default; mOriginalUsage = TextureUsage::Default;
@ -358,14 +356,15 @@ namespace MyGUI
tex->SetStream( m_texStream.upcast<IO::Stream>() ); tex->SetStream( m_texStream.upcast<IO::Stream>() );
m_texStream->Close(); m_texStream->Close();
//m_texStream->SetAccessMode( IO::Stream::ReadAccess ); //m_texStream->SetAccessMode( IO::Stream::ReadAccess );
m_texHandle = Graphic::GraphicSystem::Instance()->CreateTexture(tex); RenderBase::TextureHandle handle = Graphic::GraphicSystem::Instance()->CreateTexture(tex);
m_texRes = Resources::TextureResInfo::Create();
m_texRes->SetHandle(handle);
GenesisTextureMgr::Instance()->AddManualTexture(this); GenesisTextureMgr::Instance()->AddManualTexture(this);
m_bManualCreate = true; m_bManualCreate = true;
} }
else else
{ {
m_texHandle = NULL; m_texRes = NULL;
m_width = 0; m_width = 0;
m_height = 0; m_height = 0;
mOriginalUsage = TextureUsage::Default; mOriginalUsage = TextureUsage::Default;
@ -499,10 +498,9 @@ namespace MyGUI
m_texStream = NULL;*/ m_texStream = NULL;*/
GPtr<TextureResInfo> tri = Resources::ResourceManager::Instance()->CreateTextureInfo(url, 0); m_texRes = Resources::ResourceManager::Instance()->CreateTextureInfo(url, 0);
m_texHandle = tri->GetHandle();
RenderBase::TEXTURE_DESC texDesc; RenderBase::TEXTURE_DESC texDesc;
GraphicSystem::Instance()->GetTextureDesc(m_texHandle, texDesc); GraphicSystem::Instance()->GetTextureDesc(m_texRes->GetHandle(), texDesc);
m_width = texDesc.width; m_width = texDesc.width;
m_height = texDesc.height; m_height = texDesc.height;
@ -518,15 +516,31 @@ namespace MyGUI
GenesisRTTexture* wjRt = static_cast<GenesisRTTexture*>(mRenderTarget); GenesisRTTexture* wjRt = static_cast<GenesisRTTexture*>(mRenderTarget);
const GPtr<Graphic::RenderToTexture>& rendetToTexture = wjRt->getRenderToTexture(); const GPtr<Graphic::RenderToTexture>& rendetToTexture = wjRt->getRenderToTexture();
const GPtr<RenderBase::RenderTarget>& renderTarget = rendetToTexture->GetRenderTarget(); const GPtr<RenderBase::RenderTarget>& renderTarget = rendetToTexture->GetRenderTarget();
m_width = renderTarget->GetWidth(); m_width = renderTarget->GetWidth();
m_height = renderTarget->GetHeight(); m_height = renderTarget->GetHeight();
mOriginalUsage = TextureUsage::RenderTarget; mOriginalUsage = TextureUsage::RenderTarget;
setFormat(FormatWjToMyGui(renderTarget->GetColorBufferFormat())); setFormat(FormatWjToMyGui(renderTarget->GetColorBufferFormat()));
m_texHandle = rendetToTexture->GetTextureHandle();
m_texRes = NULL;
m_bManualCreate = false;
} }
RenderBase::TextureHandle GenesisTexture::GetTextureHandle() const
{
if (m_texRes.isvalid())
{
return m_texRes->GetHandle();
}
if (mRenderTarget)
{
GenesisRTTexture* wjRt = static_cast<GenesisRTTexture*>(mRenderTarget);
const GPtr<Graphic::RenderToTexture>& rendetToTexture = wjRt->getRenderToTexture();
return rendetToTexture->GetTextureHandle();
}
return NULL;
}
void GenesisTexture::setFormat(PixelFormat format) void GenesisTexture::setFormat(PixelFormat format)
{ {
mOriginalFormat = format; mOriginalFormat = format;

View File

@ -49,6 +49,7 @@ namespace MyGUI
GenesisVertexBuffer::~GenesisVertexBuffer() GenesisVertexBuffer::~GenesisVertexBuffer()
{ {
destroyVertexBuffer(); destroyVertexBuffer();
GenesisVertexBufferMgr::Instance()->RemoveVertexBuffer(this);
} }
bool _createVertexComponent(Util::Array<RenderBase::VertexComponent>& vertexComponents) bool _createVertexComponent(Util::Array<RenderBase::VertexComponent>& vertexComponents)

View File

@ -55,6 +55,16 @@ namespace MyGUI
} }
} }
void GenesisVertexBufferMgr::RemoveVertexBuffer( GenesisVertexBuffer* const& pBuffer )
{
IndexT res = m_AllVertexBuffers.FindIndex(pBuffer);
if (res != InvalidIndex)
{
m_AllVertexBuffers.EraseIndex(res);
}
}
void GenesisVertexBufferMgr::ResetAllBuffers() const void GenesisVertexBufferMgr::ResetAllBuffers() const
{ {
SizeT nCount = m_AllVertexBuffers.Size(); SizeT nCount = m_AllVertexBuffers.Size();

View File

@ -42,6 +42,7 @@ namespace Particles
ColorAffector::ColorAffector(void) : ParticleAffector(),mMinAlpha(0.0f),mMaxAlpha(1.0f),mTimeAlpha(false) ColorAffector::ColorAffector(void) : ParticleAffector(),mMinAlpha(0.0f),mMaxAlpha(1.0f),mTimeAlpha(false)
, mColorCtlType(CCT_GRADCURVE) , mColorCtlType(CCT_GRADCURVE)
{ {
mAffectType = AT_Color;
mMinMaxColorA.SetCurveState(Math::MinMaxCurve::Scalar); mMinMaxColorA.SetCurveState(Math::MinMaxCurve::Scalar);
mMinMaxColorR.SetCurveState(Math::MinMaxCurve::Scalar); mMinMaxColorR.SetCurveState(Math::MinMaxCurve::Scalar);
mMinMaxColorG.SetCurveState(Math::MinMaxCurve::Scalar); mMinMaxColorG.SetCurveState(Math::MinMaxCurve::Scalar);
@ -74,7 +75,7 @@ namespace Particles
return; return;
Math::Color32 clr; Math::Color32 clr;
float percent = (particle->mTotalTimeToLive - particle->mTimeToLive)/particle->mTotalTimeToLive; float percent = particle->mTimeFraction;
float randomSid = Math::n_rand(0.0f,1.0f); float randomSid = Math::n_rand(0.0f,1.0f);
clr.r = Math::n_scalartoByte(mMinMaxColorR.Calculate(percent,randomSid)); clr.r = Math::n_scalartoByte(mMinMaxColorR.Calculate(percent,randomSid));

View File

@ -38,7 +38,7 @@ namespace Particles
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
GravityAffector::GravityAffector() : ParticleAffector() GravityAffector::GravityAffector() : ParticleAffector()
{ {
mAffectType = AT_Gravity;
mName = "GravityAffector"; mName = "GravityAffector";
} }
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
@ -46,7 +46,7 @@ namespace Particles
{ {
if(!GetEnable()) if(!GetEnable())
return; return;
float percent = (particle->mTotalTimeToLive - particle->mTimeToLive)/particle->mTotalTimeToLive; float percent = particle->mTimeFraction;
Math::float3 gravityDir(mMinMaxPosX.Calculate(percent,particle->mRandom0) Math::float3 gravityDir(mMinMaxPosX.Calculate(percent,particle->mRandom0)
, mMinMaxPosY.Calculate(percent,particle->mRandom1) , mMinMaxPosY.Calculate(percent,particle->mRandom1)
@ -59,7 +59,7 @@ namespace Particles
float gravity = mMinMaxGravity.Calculate(percent,particle->mRandom3); float gravity = mMinMaxGravity.Calculate(percent,particle->mRandom3);
Math::scalar _curTime = (Math::scalar)mParentSystem->GetCurrentFrameTime(); Math::scalar _curTime = (Math::scalar)mParentSystem->GetCurrentFrameTime();
particle->mDirection += gravity * gravityDir * _curTime * _calculateAffectSpecialisationFactor(particle); particle->mDirection += gravity * gravityDir * _curTime;
} }
//------------------------------------------------------------------------------- //-------------------------------------------------------------------------------

View File

@ -37,6 +37,7 @@ namespace Particles
LimitAffector::LimitAffector(void) : ParticleAffector() LimitAffector::LimitAffector(void) : ParticleAffector()
, mSeparateAxis(false) , mSeparateAxis(false)
{ {
mAffectType = AT_Limit;
mName = "LimitAffector"; mName = "LimitAffector";
mLimitX.SetScalar(0.0f); mLimitX.SetScalar(0.0f);
mLimitY.SetScalar(0.0f); mLimitY.SetScalar(0.0f);
@ -53,7 +54,7 @@ namespace Particles
if (particle) if (particle)
{ {
float curTime = (particle->mTotalTimeToLive - particle->mTimeToLive)/particle->mTotalTimeToLive; float curTime = particle->mTimeFraction;
//mAxisX //mAxisX
float limitX = mLimitX.Calculate(curTime,particle->mRandom0); float limitX = mLimitX.Calculate(curTime,particle->mRandom0);

View File

@ -39,7 +39,7 @@ namespace Particles
, mSpaceCoord(SCT_LOCAL) , mSpaceCoord(SCT_LOCAL)
{ {
mName = "LinearForceAffector"; mName = "LinearForceAffector";
mAffectType = AT_INCREASE; mAffectType = AT_Force;
} }
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
void LinearForceAffector::_preProcessParticles() void LinearForceAffector::_preProcessParticles()
@ -54,8 +54,7 @@ namespace Particles
if (mTimeSinceLastUpdate >= mTimeStep) if (mTimeSinceLastUpdate >= mTimeStep)
{ {
float percent = (particle->mTotalTimeToLive - particle->mTimeToLive)/particle->mTotalTimeToLive; float percent = particle->mTimeFraction;
Math::float3 forceVec(mForceVectorX.Calculate(percent,particle->mRandom0) , Math::float3 forceVec(mForceVectorX.Calculate(percent,particle->mRandom0) ,
mForceVectorY.Calculate(percent,particle->mRandom1), mForceVectorY.Calculate(percent,particle->mRandom1),
@ -63,7 +62,6 @@ namespace Particles
if ( mSpaceCoord == SCT_WORLD ) if ( mSpaceCoord == SCT_WORLD )
{ {
forceVec = forceVec.transformVector(Math::matrix44::inverse(mParentSystem->GetWorldMatrix())); forceVec = forceVec.transformVector(Math::matrix44::inverse(mParentSystem->GetWorldMatrix()));
} }
@ -106,6 +104,13 @@ namespace Particles
pMarcro->TurnOn(ShaderProgramCompiler::ShaderMarcro::m_sParticleForce); pMarcro->TurnOn(ShaderProgramCompiler::ShaderMarcro::m_sParticleForce);
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
const Math::float3 LinearForceAffector::_getEndPos(const Math::float3& pos,const Math::float3 speed,float time)
{
Math::float3 endPos;
endPos = pos + speed*time + 0.5*mShaderParam*time*time;
return endPos;
}
//--------------------------------------------------------------------------------
Math::MinMaxCurve* LinearForceAffector::getMinMaxCurve(ParticleCurveType pct) Math::MinMaxCurve* LinearForceAffector::getMinMaxCurve(ParticleCurveType pct)
{ {
switch(pct) switch(pct)

View File

@ -63,6 +63,8 @@ namespace Particles
void SetShaderParam(); void SetShaderParam();
void InitShaderParam(); void InitShaderParam();
void SetShaderMask(const GPtr<ShaderProgramCompiler::ShaderMarcro>& pMarcro); void SetShaderMask(const GPtr<ShaderProgramCompiler::ShaderMarcro>& pMarcro);
inline const Math::float3& GetShaderParam() const;
const Math::float3 _getEndPos(const Math::float3& pos,const Math::float3 speed,float time);
protected: protected:
Math::float3 mScaledVector; Math::float3 mScaledVector;
ForceApplication mForceApplication; ForceApplication mForceApplication;
@ -124,6 +126,11 @@ namespace Particles
{ {
mSpaceCoord = sct; mSpaceCoord = sct;
} }
//--------------------------------------------------------------------------------
inline const Math::float3& LinearForceAffector::GetShaderParam() const
{
return mShaderParam;
}
} }

View File

@ -36,6 +36,7 @@ namespace Particles
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
MovementAffector::MovementAffector() : ParticleAffector() MovementAffector::MovementAffector() : ParticleAffector()
{ {
mAffectType = AT_Movement;
mMinMaxSpeed.SetScalar( 1.0f ); mMinMaxSpeed.SetScalar( 1.0f );
mName = "MovementAffector"; mName = "MovementAffector";
} }
@ -44,7 +45,7 @@ namespace Particles
{ {
if(!GetEnable()) if(!GetEnable())
return; return;
float percent = (particle->mTotalTimeToLive - particle->mTimeToLive)/particle->mTotalTimeToLive; float percent = particle->mTimeFraction;
Math::float3 GravityPos(mMinMaxPosX.Calculate(percent,particle->mRandom0) Math::float3 GravityPos(mMinMaxPosX.Calculate(percent,particle->mRandom0)
, mMinMaxPosY.Calculate(percent,particle->mRandom1) , mMinMaxPosY.Calculate(percent,particle->mRandom1)
@ -79,6 +80,19 @@ namespace Particles
pMarcro->TurnOn(ShaderProgramCompiler::ShaderMarcro::m_sParticleMovement); pMarcro->TurnOn(ShaderProgramCompiler::ShaderMarcro::m_sParticleMovement);
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
const Math::float3 MovementAffector::_getEndPos(const Math::float3& pos,const Math::float3 speed,float time)
{
Math::float3 endPos = pos;
Math::float3 aimPos;
aimPos.setFromFloat4(mShaderParam);
Math::float3 dir = aimPos - pos;
dir.normalise();
dir *= mShaderParam.w();
endPos += dir*time;
return endPos;
}
//--------------------------------------------------------------------------------
Math::MinMaxCurve* MovementAffector::getMinMaxCurve(ParticleCurveType pct) Math::MinMaxCurve* MovementAffector::getMinMaxCurve(ParticleCurveType pct)
{ {
switch(pct) switch(pct)

View File

@ -43,6 +43,7 @@ namespace Particles
void SetShaderParam(); void SetShaderParam();
void InitShaderParam(); void InitShaderParam();
void SetShaderMask(const GPtr<ShaderProgramCompiler::ShaderMarcro>& pMarcro); void SetShaderMask(const GPtr<ShaderProgramCompiler::ShaderMarcro>& pMarcro);
const Math::float3 _getEndPos(const Math::float3& pos,const Math::float3 speed,float time);
protected: protected:
Math::MinMaxCurve mMinMaxSpeed; Math::MinMaxCurve mMinMaxSpeed;

View File

@ -37,7 +37,7 @@ namespace Particles
ScaleAffector::ScaleAffector(void) : ParticleAffector() ScaleAffector::ScaleAffector(void) : ParticleAffector()
, mIsAxialScale(false) , mIsAxialScale(false)
{ {
mAffectType = AT_Scale;
mScaleX.SetScalar(1.0f); mScaleX.SetScalar(1.0f);
mScaleY.SetScalar(1.0f); mScaleY.SetScalar(1.0f);
mScaleZ.SetScalar(1.0f); mScaleZ.SetScalar(1.0f);
@ -50,7 +50,7 @@ namespace Particles
{ {
if( !GetEnable()) if( !GetEnable())
return; return;
float percent = (particle->mTotalTimeToLive - particle->mTimeToLive)/particle->mTotalTimeToLive; float percent = particle->mTimeFraction;
Math::float3 particleSize(mScaleX.Calculate(percent,particle->mRandom0), Math::float3 particleSize(mScaleX.Calculate(percent,particle->mRandom0),
mScaleY.Calculate(percent,particle->mRandom1), mScaleY.Calculate(percent,particle->mRandom1),

View File

@ -51,8 +51,20 @@ namespace Particles
mTexStart(0), mTexStart(0),
mTexEnd(1) mTexEnd(1)
{ {
mAffectType = AT_Texture;
mName = "TextureAnimatorAffector"; mName = "TextureAnimatorAffector";
mMinMaxTexAnimation.SetCurveState(Math::MinMaxCurve::Curve); mMinMaxTexAnimation.SetCurveState(Math::MinMaxCurve::Curve);
Util::Array<Math::float2> _list;
Util::Array<bool> _type;
_list.Append(Math::float2(0,0));
_type.Append(true);
_type.Append(true);
_list.Append(Math::float2(0.5,0.5));
_list.Append(Math::float2(0.5,0.5));
_list.Append(Math::float2(1,1));
_type.Append(true);
_type.Append(true);
mMinMaxTexAnimation.SetCurveFromArray(_list,_type);
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
void TextureAnimatorAffector::_onActivate(void) void TextureAnimatorAffector::_onActivate(void)
@ -125,7 +137,7 @@ namespace Particles
if(!mEnable) if(!mEnable)
return; return;
float percent = (particle->mTotalTimeToLive - particle->mTimeToLive)/particle->mTotalTimeToLive; float percent = particle->mTimeFraction;
float time = mCycles * percent; float time = mCycles * percent;
float texCoordIndex = 0; float texCoordIndex = 0;

View File

@ -36,6 +36,7 @@ namespace Particles
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
TextureRotatorAffector::TextureRotatorAffector(void) : ParticleAffector() TextureRotatorAffector::TextureRotatorAffector(void) : ParticleAffector()
{ {
mAffectType = AT_Rotation;
mName = "TextureRotatorAffector"; mName = "TextureRotatorAffector";
} }
//------------------------------------------------------------------------ //------------------------------------------------------------------------
@ -49,7 +50,7 @@ namespace Particles
if(!GetEnable()) if(!GetEnable())
return; return;
float percent = (particle->mTotalTimeToLive - particle->mTimeToLive)/particle->mTotalTimeToLive; float percent = particle->mTimeFraction;
float rotatorAngularVelocity = mMinMaxRotation.Calculate(percent,particle->mRandom0); float rotatorAngularVelocity = mMinMaxRotation.Calculate(percent,particle->mRandom0);

View File

@ -38,6 +38,7 @@ namespace Particles
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
VortexAffector::VortexAffector(void) : ParticleAffector() VortexAffector::VortexAffector(void) : ParticleAffector()
{ {
mAffectType = AT_Vortex;
mName = "VortexAffector"; mName = "VortexAffector";
} }
//------------------------------------------------------------------------ //------------------------------------------------------------------------
@ -49,7 +50,7 @@ namespace Particles
{ {
if(!GetEnable()) if(!GetEnable())
return; return;
float percent = (particle->mTotalTimeToLive - particle->mTimeToLive)/particle->mTotalTimeToLive; float percent = particle->mTimeFraction;
Math::vector normal(mMinMaxNormalX.Calculate(percent,particle->mRandom0), Math::vector normal(mMinMaxNormalX.Calculate(percent,particle->mRandom0),
mMinMaxNormalY.Calculate(percent,particle->mRandom1), mMinMaxNormalY.Calculate(percent,particle->mRandom1),
mMinMaxNormalZ.Calculate(percent,particle->mRandom2) ); mMinMaxNormalZ.Calculate(percent,particle->mRandom2) );

View File

@ -59,16 +59,15 @@ namespace Particles
mParentSystem->SetLoadEmitterMesh(false); mParentSystem->SetLoadEmitterMesh(false);
} }
mMeshName = name; mMeshName = name;
#ifdef __GENESIS_EDITOR__ // edtior use
mRealMeshName = name;
#endif
mMeshRes = NULL; mMeshRes = NULL;
mVertList.Clear(); mVertList.Clear();
} }
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
void ModelEmitter::SetMeshRes(void* resource) void ModelEmitter::SetMeshRes(void* resource)
{ {
if (mParentSystem)
{
mParentSystem->SetLoadEmitterMesh(false);
}
mMeshRes = resource; mMeshRes = resource;
} }
//----------------------------------------------------------------------- //-----------------------------------------------------------------------
@ -84,7 +83,9 @@ namespace Particles
if (mVertList.IsEmpty()) if (mVertList.IsEmpty())
{ {
Resources::MeshRes* meshres = (Resources::MeshRes*)mMeshRes; Resources::MeshRes* meshres = (Resources::MeshRes*)mMeshRes;
#ifdef __GENESIS_EDITOR__ // edtior use
mRealMeshName = meshres->GetResourceId().AsString();
#endif
const Resources::NormalData::value_type* normals = meshres->GetVertexData<Resources::NormalData>(); const Resources::NormalData::value_type* normals = meshres->GetVertexData<Resources::NormalData>();
const Resources::PositionData::value_type* verteies = meshres->GetVertexData<Resources::PositionData>(); const Resources::PositionData::value_type* verteies = meshres->GetVertexData<Resources::PositionData>();

View File

@ -51,7 +51,11 @@ namespace Particles
void SetMeshEmitType(MeshEmitType); void SetMeshEmitType(MeshEmitType);
MeshEmitType GetMeshEmitType(void) const; MeshEmitType GetMeshEmitType(void) const;
#ifdef __GENESIS_EDITOR__ // edtior use
const Util::String& GetRealMeshName(void) const;
protected:
Util::String mRealMeshName;
#endif
protected: protected:
Util::String mMeshName; Util::String mMeshName;
void* mMeshRes; void* mMeshRes;
@ -59,6 +63,7 @@ namespace Particles
Util::Array<ParticleVertexData> mVertList; Util::Array<ParticleVertexData> mVertList;
public: public:
// @ISerialization::GetVersion. when change storage, must add SerializeSVersion count // @ISerialization::GetVersion. when change storage, must add SerializeSVersion count
virtual Serialization::SVersion GetVersion() const; virtual Serialization::SVersion GetVersion() const;
@ -94,7 +99,13 @@ namespace Particles
{ {
return mEmitType; return mEmitType;
} }
#ifdef __GENESIS_EDITOR__ // edtior use
//--------------------------------------------------------------------------------
inline const Util::String& ModelEmitter::GetRealMeshName(void) const
{
return mRealMeshName;
}
#endif
} }
#endif #endif

View File

@ -49,7 +49,7 @@ namespace Particles
Math::float3 mNormal; Math::float3 mNormal;
Math::float2 mTexCoord; Math::float2 mTexCoord;
}; };
struct SimpleGPUParticleVertex { struct SpriteGPUParticleVertex {
Math::Color32 mColor; Math::Color32 mColor;
Math::float3 mPosition; Math::float3 mPosition;
Math::float3 mNormal; Math::float3 mNormal;
@ -57,6 +57,14 @@ namespace Particles
float mSize; float mSize;
}; };
struct BoardGPUParticleVertex {
Math::Color32 mColor;
Math::float4 mTangent;
Math::float3 mPosition;
Math::float3 mNormal;
Math::float2 mTexCoord;
};
enum ColorContrlType{CCT_CONST, CCT_RND_CONST, CCT_GRADCURVE, CCT_RND_GRADCURVE}; enum ColorContrlType{CCT_CONST, CCT_RND_CONST, CCT_GRADCURVE, CCT_RND_GRADCURVE};
enum SpaceCoordType{SCT_LOCAL, SCT_WORLD, SCT_CAMERA}; enum SpaceCoordType{SCT_LOCAL, SCT_WORLD, SCT_CAMERA};
@ -192,7 +200,7 @@ namespace Particles
inline IndexT GenerateRandomSeed(void* p) inline IndexT GenerateRandomSeed(void* p)
{ {
return ( (IndexT)p ) & 0xFFFF; return ( (intptr_t)p ) & 0xFFFF;
} }
// From Ogre: rotation of a vector by a quaternion // From Ogre: rotation of a vector by a quaternion

View File

@ -36,7 +36,7 @@ namespace Particles
: mParentSystem(NULL) : mParentSystem(NULL)
, mIsActive(false) , mIsActive(false)
, mName("Affector") , mName("Affector")
, mAffectType(ParticleAffector::AT_DEFAULT) , mAffectType(ParticleAffector::UnKnown)
, mEnable(true) , mEnable(true)
{ {
@ -100,40 +100,6 @@ namespace Particles
{ {
particle->mPosition += (particle->mDirection * (Math::scalar)mParentSystem->GetCurrentFrameTime() ); particle->mPosition += (particle->mDirection * (Math::scalar)mParentSystem->GetCurrentFrameTime() );
} }
//------------------------------------------------------------------------
Math::scalar ParticleAffector::_calculateAffectSpecialisationFactor (Particle* particle)
{
switch (mAffectType)
{
case AT_DEFAULT:
return 1.0f;
break;
case AT_INCREASE:
{
if(particle)
return particle->mTimeFraction;
else
return 1.0f;
}
break;
case AT_DECREASE:
{
if (particle)
{
return 1.0f - particle->mTimeFraction;
}
else
{
return 1.0f;
}
}
break;
default:
return 1.0f;
break;
}
}
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
Math::MinMaxCurve* ParticleAffector::getMinMaxCurve(ParticleCurveType pct) Math::MinMaxCurve* ParticleAffector::getMinMaxCurve(ParticleCurveType pct)
{ {

View File

@ -38,9 +38,17 @@ namespace Particles
enum AffectType enum AffectType
{ {
AT_DEFAULT, AT_Color,
AT_INCREASE, AT_Gravity,
AT_DECREASE AT_Limit,
AT_Force,
AT_Movement,
AT_Scale,
AT_Texture,
AT_Rotation,
AT_Vortex,
UnKnown
}; };
@ -90,10 +98,9 @@ namespace Particles
virtual void InitShaderParam(); virtual void InitShaderParam();
virtual void SetShaderMask(const GPtr<ShaderProgramCompiler::ShaderMarcro>& pMarcro); virtual void SetShaderMask(const GPtr<ShaderProgramCompiler::ShaderMarcro>& pMarcro);
Math::scalar _calculateAffectSpecialisationFactor (Particle* particle);
virtual Math::MinMaxCurve* getMinMaxCurve(ParticleCurveType pct); virtual Math::MinMaxCurve* getMinMaxCurve(ParticleCurveType pct);
virtual void _switchParticleType(bool _isMobile); virtual void _switchParticleType(bool _isMobile);
virtual const Math::float3 _getEndPos(const Math::float3& pos,const Math::float3 speed,float time);
protected: protected:
ParticleSystem* mParentSystem; ParticleSystem* mParentSystem;
Util::String mName; Util::String mName;
@ -185,6 +192,11 @@ namespace Particles
{ {
//empty //empty
} }
//------------------------------------------------------------------------
inline const Math::float3 ParticleAffector::_getEndPos(const Math::float3& pos,const Math::float3 speed,float time)
{
return pos;
}
} }

View File

@ -48,6 +48,11 @@ namespace Particles
Load_2(obj,pReader); Load_2(obj,pReader);
return; return;
} }
else if(3 == ver)
{
Load_3(obj,pReader);
return;
}
n_error(" %s Load unknown version.\n", obj->GetClassName().AsCharPtr() ); n_error(" %s Load unknown version.\n", obj->GetClassName().AsCharPtr() );
} }
//------------------------------------------------------------------------ //------------------------------------------------------------------------
@ -59,7 +64,7 @@ namespace Particles
int specialisation; int specialisation;
pReader->SerializeInt( s_AffectSpecialisation , specialisation); pReader->SerializeInt( s_AffectSpecialisation , specialisation);
obj->SetAffectType((ParticleAffector::AffectType)specialisation); //obj->SetAffectType((ParticleAffector::AffectType)specialisation);
} }
void Load_2(ParticleAffector* obj, SerializeReader* pReader) void Load_2(ParticleAffector* obj, SerializeReader* pReader)
{ {
@ -68,12 +73,21 @@ namespace Particles
obj->SetEnable(active); obj->SetEnable(active);
Load_1(obj,pReader); Load_1(obj,pReader);
} }
void Load_3(ParticleAffector* obj, SerializeReader* pReader)
{
bool active;
pReader->SerializeBool(s_AffectorEnable,active);
obj->SetEnable(active);
Util::String name;
pReader->SerializeString( s_AffectorName, name );
obj->SetName( name );
}
//------------------------------------------------------------------------ //------------------------------------------------------------------------
void Save( const ParticleAffector* obj, SerializeWriter* pWriter ) void Save( const ParticleAffector* obj, SerializeWriter* pWriter )
{ {
pWriter->SerializeBool(s_AffectorEnable,obj->GetEnable()); pWriter->SerializeBool(s_AffectorEnable,obj->GetEnable());
pWriter->SerializeString( s_AffectorName, obj->GetName() ); pWriter->SerializeString( s_AffectorName, obj->GetName() );
pWriter->SerializeInt( s_AffectSpecialisation, (int)obj->GetAffectType());
} }
}; };
@ -81,7 +95,7 @@ namespace Particles
// @ISerialization::GetVersion. when change storage, must add SerializeVersion count // @ISerialization::GetVersion. when change storage, must add SerializeVersion count
SVersion ParticleAffector::GetVersion() const SVersion ParticleAffector::GetVersion() const
{ {
return 2; return 3;
} }
//------------------------------------------------------------------------ //------------------------------------------------------------------------

View File

@ -111,6 +111,7 @@ namespace Particles
float GetGPUParticleRate(); //for gpu particles; float GetGPUParticleRate(); //for gpu particles;
float GetGPUParticleLife(); float GetGPUParticleLife();
void Reset();
private: private:
bool mShapeVisible; bool mShapeVisible;
public: public:
@ -332,6 +333,10 @@ namespace Particles
{ {
return mMinMaxLiveTime.Calculate(0,Math::n_rand(0.0f,1.0f)); return mMinMaxLiveTime.Calculate(0,Math::n_rand(0.0f,1.0f));
} }
inline void ParticleEmitter::Reset()
{
mRemainder = 0;
}
} }
#endif // __particleemitter_H__ #endif // __particleemitter_H__

View File

@ -45,7 +45,7 @@ namespace Particles
const Timing::Time ParticleSystem::MinFrameTime(0.000001); const Timing::Time ParticleSystem::MinFrameTime(0.000001);
const float ParticleSystem::MinUpdateTime(0.033f); const float ParticleSystem::MinUpdateTime(0.033f);
const float ParticleSystem::MaxUpdateTime(0.33f); const float ParticleSystem::MaxUpdateTime(0.33f);
const float ParticleSystem::UpdateFactor(0.5f); const float ParticleSystem::UpdateFactor(0.002f);
//------------------------------------------------------------------------ //------------------------------------------------------------------------
ParticleSystem::ParticleSystem() ParticleSystem::ParticleSystem()
: mIsActive(false) : mIsActive(false)
@ -199,9 +199,10 @@ namespace Particles
mNeedUpdate = false; mNeedUpdate = false;
mUpdateTarget = true; mUpdateTarget = true;
Timing::Time time = App::GameTime::Instance()->GetFrameTime(); Timing::Time time = App::GameTime::Instance()->GetFrameTime();
double curFrame = GameTime::Instance()->GetTime();
if(mIsPlaying) if(mIsPlaying)
mMobileTime = curFrame; {
mMobileTime += time;
}
Timing::Time total = time; Timing::Time total = time;
//==================================================================================== //====================================================================================
@ -212,7 +213,7 @@ namespace Particles
#endif #endif
if(bNeedLimitRate) if(bNeedLimitRate)
{ {
_fpsControl(); //_fpsControl();
mCurrentTimeForFps += time; mCurrentTimeForFps += time;
if(mCurrentTimeForFps < mspf) if(mCurrentTimeForFps < mspf)
{ {
@ -375,6 +376,7 @@ namespace Particles
mLastUpdateFrameIndex = -1; mLastUpdateFrameIndex = -1;
ParticleSystemDataChanged(); ParticleSystemDataChanged();
_resetPool(mQuota); _resetPool(mQuota);
mEmitter->Reset();
} }
//------------------------------------------------------------------------ //------------------------------------------------------------------------
@ -865,7 +867,7 @@ namespace Particles
} }
return delayTime; return delayTime;
} }
void ParticleSystem::SetupGPUParticles(SimpleGPUParticleVertex* particleVertex,int quato) void ParticleSystem::SetupSpriteGPUParticles(SpriteGPUParticleVertex* particleVertex,int quato)
{ {
float rate = mEmitter->GetGPUParticleRate(); float rate = mEmitter->GetGPUParticleRate();
float life = mEmitter->GetGPUParticleLife(); float life = mEmitter->GetGPUParticleLife();
@ -877,6 +879,8 @@ namespace Particles
if(mIsPreLoop && mIsPlaying) if(mIsPreLoop && mIsPlaying)
_time -= life; _time -= life;
Math::Color32 _color; Math::Color32 _color;
Math::bbox _box;
_box.begin_extend();
while (totalPar < quato) while (totalPar < quato)
{ {
mEmitter->_emit(particle,(float)mDuration*totalPar/quato); mEmitter->_emit(particle,(float)mDuration*totalPar/quato);
@ -887,7 +891,80 @@ namespace Particles
particleVertex[totalPar].mTexCoord.set(_time,particle->mTotalTimeToLive); particleVertex[totalPar].mTexCoord.set(_time,particle->mTotalTimeToLive);
_time += rateFps; _time += rateFps;
totalPar ++; totalPar ++;
_box.extend(Math::point(
particle->mPosition.x(),particle->mPosition.y(),particle->mPosition.z()));
Math::float3 endPos;
endPos = _getEndPos(particle->mPosition,particle->mDirection,life);
_box.extend(Math::point(
endPos.x(),endPos.y(),endPos.z()));
} }
_box.end_extend();
_box.pmax += Math::point(
particle->mSize.x()*0.5f,particle->mSize.y()*0.5f,particle->mSize.z()*0.5f);
_box.pmin -= Math::point(
particle->mSize.x()*0.5f,particle->mSize.y()*0.5f,particle->mSize.z()*0.5f);
SetLocalBoundingBox(_box);
delete particle;
}
void ParticleSystem::SetupBoardGPUParticles(BoardGPUParticleVertex* particleVertex,ushort* indicies,int quato)
{
float rate = mEmitter->GetGPUParticleRate();
float life = mEmitter->GetGPUParticleLife();
mDuration = life;
float rateFps = 1.0f/rate;
int totalPar = 0;
Particle* particle = new Particle();
float _time = (float)mDelayTime;
if(mIsPreLoop && mIsPlaying)
_time = -life;
mMobileTime = 0;
Math::Color32 _color;
Math::bbox _box;
float halfSize = 0;
_box.begin_extend();
while (totalPar < quato)
{
mEmitter->_emit(particle,(float)mDuration*totalPar/quato);
halfSize = 0.5f*particle->mSize.x();
particleVertex[4*totalPar].mColor = particle->mColor.HexARGB();
particleVertex[4*totalPar].mPosition = particle->mPosition;
particleVertex[4*totalPar].mTangent.set(-halfSize,halfSize,0,0);
particleVertex[4*totalPar].mNormal = particle->mDirection;
particleVertex[4*totalPar].mTexCoord.set(_time,particle->mTotalTimeToLive);
particleVertex[4*totalPar+1] = particleVertex[4*totalPar];
particleVertex[4*totalPar+1].mTangent.set(-halfSize,-halfSize,0,1);
particleVertex[4*totalPar+2] = particleVertex[4*totalPar];
particleVertex[4*totalPar+2].mTangent.set(halfSize,-halfSize,1,1);
particleVertex[4*totalPar+3] = particleVertex[4*totalPar];
particleVertex[4*totalPar+3].mTangent.set(halfSize,halfSize,1,0);
indicies[6*totalPar] = 4*totalPar;
indicies[6*totalPar+1] = 4*totalPar + 1;
indicies[6*totalPar+2] = 4*totalPar + 2;
indicies[6*totalPar+3] = 4*totalPar + 2;
indicies[6*totalPar+4] = 4*totalPar + 3;
indicies[6*totalPar+5] = 4*totalPar ;
_time += rateFps;
totalPar ++;
_box.extend(Math::point(
particle->mPosition.x(),particle->mPosition.y(),particle->mPosition.z()));
Math::float3 endPos;
endPos = _getEndPos(particle->mPosition,particle->mDirection,life);
_box.extend(Math::point(
endPos.x(),endPos.y(),endPos.z()));
}
_box.end_extend();
_box.pmax += Math::point(
particle->mSize.x()*0.5f,particle->mSize.y()*0.5f,particle->mSize.z()*0.5f);
_box.pmin -= Math::point(
particle->mSize.x()*0.5f,particle->mSize.y()*0.5f,particle->mSize.z()*0.5f);
SetLocalBoundingBox(_box);
delete particle; delete particle;
} }
void ParticleSystem::ParticleSystemDataChanged() void ParticleSystem::ParticleSystemDataChanged()
@ -964,5 +1041,17 @@ namespace Particles
mAffectors[index]->SetShaderMask(pMarcro); mAffectors[index]->SetShaderMask(pMarcro);
} }
} }
//--------------------------------------------------------------------------------
const Math::float3 ParticleSystem::_getEndPos(const Math::float3& pos,const Math::float3 speed,float time)
{
ParticleAffectorPtr affector = NULL;
Math::float3 endPos = pos + speed*time;
for ( IndexT index = 0; index < mAffectors.Size(); ++index)
{
affector = mAffectors[index];
endPos = affector->_getEndPos(pos,speed,time);
}
return endPos;
}
} }

View File

@ -205,7 +205,8 @@ namespace Particles
void SetUpdateUnVis(bool _update); void SetUpdateUnVis(bool _update);
const bool GetUpdateUnVis() const; const bool GetUpdateUnVis() const;
void _NeedUpdate(); void _NeedUpdate();
void SetupGPUParticles(SimpleGPUParticleVertex* particleVertex,int quato); void SetupSpriteGPUParticles(SpriteGPUParticleVertex* particleVertex,int quato);
void SetupBoardGPUParticles(BoardGPUParticleVertex* particleVertex,ushort* indicies,int quato);
bool _NeedUpdateBox(); bool _NeedUpdateBox();
void ParticleSystemDataChanged(); void ParticleSystemDataChanged();
void SetShaderParam(); void SetShaderParam();
@ -229,6 +230,7 @@ namespace Particles
void _repeatUpdate(float); void _repeatUpdate(float);
void _techUpdate(Timing::Time frameTime,IndexT frameIndex ); void _techUpdate(Timing::Time frameTime,IndexT frameIndex );
void _fpsControl(); void _fpsControl();
const Math::float3 _getEndPos(const Math::float3& pos,const Math::float3 speed,float time);
protected: protected:
bool mIsActive; bool mIsActive;
bool mPlayOnAwake; bool mPlayOnAwake;

View File

@ -25,6 +25,7 @@ THE SOFTWARE.
#include "particles/particlesystem.h" #include "particles/particlesystem.h"
#include "particles/particletechnique.h" #include "particles/particletechnique.h"
namespace Particles namespace Particles
{ {
using namespace Serialization; using namespace Serialization;
@ -183,7 +184,6 @@ namespace Particles
pReader->SerializeBool(s_PlayOnAwake, playOnAwake ); pReader->SerializeBool(s_PlayOnAwake, playOnAwake );
#if __EDIT_STATUS__ #if __EDIT_STATUS__
obj->SetPlayOnAwake( playOnAwake, EditStatus::IsPlayingGame() ); obj->SetPlayOnAwake( playOnAwake, EditStatus::IsPlayingGame() );
#else #else
obj->SetPlayOnAwake( playOnAwake); obj->SetPlayOnAwake( playOnAwake);
#endif #endif
@ -207,8 +207,8 @@ namespace Particles
bool playOnAwake; bool playOnAwake;
pReader->SerializeBool(s_PlayOnAwake, playOnAwake ); pReader->SerializeBool(s_PlayOnAwake, playOnAwake );
#ifdef __GENESIS_EDITOR__ #if __EDIT_STATUS__
obj->SetPlayOnAwake( playOnAwake); obj->SetPlayOnAwake( playOnAwake, EditStatus::IsPlayingGame() );
#else #else
obj->SetPlayOnAwake( playOnAwake, true ); obj->SetPlayOnAwake( playOnAwake, true );
#endif #endif
@ -277,8 +277,8 @@ namespace Particles
bool playOnAwake; bool playOnAwake;
pReader->SerializeBool(s_PlayOnAwake, playOnAwake ); pReader->SerializeBool(s_PlayOnAwake, playOnAwake );
#ifdef __GENESIS_EDITOR__ #if __EDIT_STATUS__
obj->SetPlayOnAwake( playOnAwake); obj->SetPlayOnAwake( playOnAwake, EditStatus::IsPlayingGame() );
#else #else
obj->SetPlayOnAwake( playOnAwake, true ); obj->SetPlayOnAwake( playOnAwake, true );
#endif #endif
@ -350,8 +350,8 @@ namespace Particles
bool playOnAwake; bool playOnAwake;
pReader->SerializeBool(s_PlayOnAwake, playOnAwake ); pReader->SerializeBool(s_PlayOnAwake, playOnAwake );
#ifdef __GENESIS_EDITOR__ #if __EDIT_STATUS__
obj->SetPlayOnAwake( playOnAwake); obj->SetPlayOnAwake( playOnAwake, EditStatus::IsPlayingGame() );
#else #else
obj->SetPlayOnAwake( playOnAwake, true ); obj->SetPlayOnAwake( playOnAwake, true );
#endif #endif
@ -518,8 +518,8 @@ namespace Particles
bool playOnAwake = parSystem->GetPlayOnAwake(); bool playOnAwake = parSystem->GetPlayOnAwake();
#ifdef __GENESIS_EDITOR__ #if __EDIT_STATUS__
SetPlayOnAwake(playOnAwake); SetPlayOnAwake( playOnAwake, EditStatus::IsPlayingGame() );
#else #else
SetPlayOnAwake(playOnAwake, true); SetPlayOnAwake(playOnAwake, true);
#endif #endif

View File

@ -217,7 +217,7 @@ namespace Particles
vbd2.Setup(needCount, sizeof(ParticleVertexData), RenderBase::BufferData::Dynamic,RenderBase::PrimitiveTopology::TriangleList, false); vbd2.Setup(needCount, sizeof(ParticleVertexData), RenderBase::BufferData::Dynamic,RenderBase::PrimitiveTopology::TriangleList, false);
} }
void ParticleTarget::_initSimpleGPUVertexBuffer(Graphic::VertexBufferData2& vbd2, SizeT needCount) void ParticleTarget::_initSpriteGPUVertexBuffer(Graphic::VertexBufferData2& vbd2, SizeT needCount)
{ {
Util::Array<RenderBase::VertexComponent>& verDeclare = vbd2.GetVertexComponents(); Util::Array<RenderBase::VertexComponent>& verDeclare = vbd2.GetVertexComponents();
verDeclare.Append( VertexComponent(VertexComponent::Color,0, VertexComponent::ColorBGRA) ); verDeclare.Append( VertexComponent(VertexComponent::Color,0, VertexComponent::ColorBGRA) );
@ -225,9 +225,9 @@ namespace Particles
verDeclare.Append( VertexComponent(VertexComponent::Normal,0, VertexComponent::Float3) ); verDeclare.Append( VertexComponent(VertexComponent::Normal,0, VertexComponent::Float3) );
verDeclare.Append( VertexComponent(VertexComponent::TexCoord, 0, VertexComponent::Float2) ); verDeclare.Append( VertexComponent(VertexComponent::TexCoord, 0, VertexComponent::Float2) );
verDeclare.Append( VertexComponent(VertexComponent::Size, 0, VertexComponent::Float) ); verDeclare.Append( VertexComponent(VertexComponent::Size, 0, VertexComponent::Float) );
vbd2.Setup(needCount, sizeof(SimpleGPUParticleVertex), RenderBase::BufferData::Dynamic,RenderBase::PrimitiveTopology::PointList, false); vbd2.Setup(needCount, sizeof(SpriteGPUParticleVertex), RenderBase::BufferData::Dynamic,RenderBase::PrimitiveTopology::PointList, false);
} }
void ParticleTarget::_initAffectGPUVertexBuffer(Graphic::VertexBufferData2& vbd2, SizeT needCount) void ParticleTarget::_initBoardGPUVertexBuffer(Graphic::VertexBufferData2& vbd2, SizeT needCount)
{ {
Util::Array<RenderBase::VertexComponent>& verDeclare = vbd2.GetVertexComponents(); Util::Array<RenderBase::VertexComponent>& verDeclare = vbd2.GetVertexComponents();
verDeclare.Append( VertexComponent(VertexComponent::Color,0, VertexComponent::ColorBGRA) ); verDeclare.Append( VertexComponent(VertexComponent::Color,0, VertexComponent::ColorBGRA) );
@ -235,8 +235,7 @@ namespace Particles
verDeclare.Append( VertexComponent(VertexComponent::Position,0, VertexComponent::Float3) ); verDeclare.Append( VertexComponent(VertexComponent::Position,0, VertexComponent::Float3) );
verDeclare.Append( VertexComponent(VertexComponent::Normal,0, VertexComponent::Float3) ); verDeclare.Append( VertexComponent(VertexComponent::Normal,0, VertexComponent::Float3) );
verDeclare.Append( VertexComponent(VertexComponent::TexCoord, 0, VertexComponent::Float2) ); verDeclare.Append( VertexComponent(VertexComponent::TexCoord, 0, VertexComponent::Float2) );
verDeclare.Append( VertexComponent(VertexComponent::Size, 0, VertexComponent::Float) ); vbd2.Setup(needCount, sizeof(BoardGPUParticleVertex), RenderBase::BufferData::Static,RenderBase::PrimitiveTopology::TriangleList, false);
vbd2.Setup(needCount, sizeof(SimpleGPUParticleVertex), RenderBase::BufferData::Dynamic,RenderBase::PrimitiveTopology::PointList, false);
} }
void ParticleTarget::_initVertexBufferData(Graphic::IndexBufferData2& ibd2, SizeT needCount) void ParticleTarget::_initVertexBufferData(Graphic::IndexBufferData2& ibd2, SizeT needCount)
{ {

View File

@ -349,8 +349,8 @@ namespace Particles
virtual void _RotatorParticle(Particle* particle, ParticleVertexData* particleVertex); virtual void _RotatorParticle(Particle* particle, ParticleVertexData* particleVertex);
virtual Math::MinMaxCurve* getMinMaxCurve(ParticleCurveType pct); virtual Math::MinMaxCurve* getMinMaxCurve(ParticleCurveType pct);
void _initVertexBufferData(Graphic::VertexBufferData2& vbd2, SizeT needCount); void _initVertexBufferData(Graphic::VertexBufferData2& vbd2, SizeT needCount);
void _initSimpleGPUVertexBuffer(Graphic::VertexBufferData2& vbd2, SizeT needCount); void _initSpriteGPUVertexBuffer(Graphic::VertexBufferData2& vbd2, SizeT needCount);
void _initAffectGPUVertexBuffer(Graphic::VertexBufferData2& vbd2, SizeT needCount); void _initBoardGPUVertexBuffer(Graphic::VertexBufferData2& vbd2, SizeT needCount);
void _initVertexBufferData(Graphic::IndexBufferData2& ibd2, SizeT needCount); void _initVertexBufferData(Graphic::IndexBufferData2& ibd2, SizeT needCount);
protected: protected:
void restActiveElemCount(); void restActiveElemCount();

View File

@ -63,16 +63,44 @@ namespace Particles
mPrimDirty = true; mPrimDirty = true;
return; return;
} }
Graphic::VertexBufferData2 vbd2;
Graphic::DynamicBuffer dvb;
_initSimpleGPUVertexBuffer(vbd2, quato);
dvb.SetSize(quato*sizeof(SimpleGPUParticleVertex));
SimpleGPUParticleVertex* particleVertex = dvb.GetBufferPtr<SimpleGPUParticleVertex>();
mParentSystem->SetupGPUParticles(particleVertex,quato);
mParentSystem->InitShaderParam(); mParentSystem->InitShaderParam();
Graphic::VertexBufferData2 vbd2;
Graphic::IndexBufferData2 ibd2;
/*
_initSpriteGPUVertexBuffer(vbd2, quato);
dvb.SetSize(quato*sizeof(SpriteGPUParticleVertex));
SpriteGPUParticleVertex* particleVertex = dvb.GetBufferPtr<SpriteGPUParticleVertex>();
mParentSystem->SetupSpriteGPUParticles(particleVertex,quato);
mPrimitiveHandle = Graphic::GraphicSystem::Instance()->CreatePrimitiveHandle(&vbd2); mPrimitiveHandle = Graphic::GraphicSystem::Instance()->CreatePrimitiveHandle(&vbd2);
mActiveVertexCount = quato; mActiveVertexCount = quato;
Graphic::GraphicSystem::Instance()->UpdatePrimitiveHandle(mPrimitiveHandle, &dvb); Graphic::GraphicSystem::Instance()->UpdatePrimitiveHandle(mPrimitiveHandle, &dvb);
mPrimDirty = true;
mNeedPrimitive = false;
*/
mActiveVertexCount = 4*quato;
mActiveIndexCount = 6*quato;
vbd2.Setup(mActiveVertexCount,sizeof(BoardGPUParticleVertex),
RenderBase::BufferData::Static,RenderBase::PrimitiveTopology::TriangleList,true);
ibd2.Setup(mActiveIndexCount, RenderBase::BufferData::Static, RenderBase::IndexBufferData::Int16, true);
BoardGPUParticleVertex* particleVertex = vbd2.GetBufferPtr<BoardGPUParticleVertex>();
ushort* indicies = ibd2.GetBufferPtr<ushort>();
mParentSystem->SetupBoardGPUParticles(particleVertex,indicies,quato);
_initBoardGPUVertexBuffer(vbd2,mActiveVertexCount);
if(mPrimitiveHandle.IsValid())
{
Graphic::GraphicSystem::Instance()->RemovePrimitive(mPrimitiveHandle);
}
mPrimitiveHandle = Graphic::GraphicSystem::Instance()->CreatePrimitiveHandle(&vbd2,&ibd2);
mPrimDirty = true; mPrimDirty = true;
mNeedPrimitive = false; mNeedPrimitive = false;
} }

View File

@ -27,6 +27,8 @@ THE SOFTWARE.
#include "ETC_Header.h" #include "ETC_Header.h"
#include "foundation/io/filestream.h" #include "foundation/io/filestream.h"
#include "foundation/io/memorystream.h" #include "foundation/io/memorystream.h"
#include "rendersystem/base/GraphicCardCapability.h"
#include "rendersystem/RenderSystem.h"
// must define FREEIMAGE_LIB when use FreeImage as static lib // must define FREEIMAGE_LIB when use FreeImage as static lib
#define FREEIMAGE_LIB #define FREEIMAGE_LIB
@ -136,8 +138,8 @@ namespace Resources
//#else //#else
FreeImage_Initialise(false); FreeImage_Initialise(false);
n_printf("FreeImage version: %s Info: %s \n", FreeImage_GetVersion(), FreeImage_GetCopyrightMessage()); n_debuglog("FreeImage version: %s Info: %s \n", FreeImage_GetVersion(), FreeImage_GetCopyrightMessage());
n_printf("FreeImage Supported formats: \n"); n_debuglog("FreeImage Supported formats: \n");
for (int iType = 0; iType < FreeImage_GetFIFCount(); ++iType) for (int iType = 0; iType < FreeImage_GetFIFCount(); ++iType)
{ {
@ -159,7 +161,7 @@ namespace Resources
Util::String strType = strArray[index]; Util::String strType = strArray[index];
strType.ToUpper(); strType.ToUpper();
n_printf( " %s", strType.AsCharPtr() ); n_debuglog( " %s", strType.AsCharPtr() );
if ( InvalidIndex == mExtReg.FindIndex( strType ) ) if ( InvalidIndex == mExtReg.FindIndex( strType ) )
{ {
@ -167,7 +169,7 @@ namespace Resources
} }
} }
} }
n_printf("\n"); n_debuglog("\n");
// Set error handler // Set error handler
FreeImage_SetOutputMessage(FreeImageLoadErrorHandler); FreeImage_SetOutputMessage(FreeImageLoadErrorHandler);
@ -261,6 +263,7 @@ namespace Resources
{ {
n_assert( mStream.isvalid() && pImage.isvalid() ); n_assert( mStream.isvalid() && pImage.isvalid() );
#if RENDERDEVICE_D3D9
// check if dds // check if dds
if ( stream->GetSize() >= 4 ) if ( stream->GetSize() >= 4 )
{ {
@ -278,6 +281,33 @@ namespace Resources
// prepare check other // prepare check other
stream->Seek(0, IO::Stream::Begin ); stream->Seek(0, IO::Stream::Begin );
} }
#endif
#if RENDERDEVICE_OPENGLES
const RenderBase::GraphicCardCapability& caps = RenderBase::RenderSystem::Instance()->GetGraphicCardCapability();
if (caps.mS3TC)
{
// check if dds
if ( stream->GetSize() >= 4 )
{
//Read first byte to identify format
uint32 magic;
stream->Read(&magic,sizeof(uint32) );
FlipEndian(&magic, sizeof(uint32), 1);
if ( DDS_MAGIC == magic )
{
stream->Seek(0, IO::Stream::Begin );
return LoadDXT(stream, pImage );
}
// prepare check other
stream->Seek(0, IO::Stream::Begin );
}
}
#endif
// check if PVRTC // check if PVRTC
if ( stream->GetSize() >= sizeof(PVRTCTexHeader) ) if ( stream->GetSize() >= sizeof(PVRTCTexHeader) )

View File

@ -86,7 +86,10 @@ namespace Resources
bool ret = LoadPhysXMaterialResByVersion(pRes,pReader,version); bool ret = LoadPhysXMaterialResByVersion(pRes,pReader,version);
if(pRes->GetMat())
{
pRes->SetMat(NULL);
}
//pReader->EndFileSerialize(); //pReader->EndFileSerialize();
return ret; return ret;
} }

View File

@ -148,7 +148,7 @@ void ShaderJoint::_ParseVsOutput(const CommonShaderSetting* pCommon, const Shadi
} }
Util::String testCode = includeContent + m_sJointedSource + g_sSimpleLight; Util::String testCode = "#define D3D9\n" + includeContent + m_sJointedSource + g_sSimpleLight;
testCode += "float4 psMain (" + m_CustomFunc.paramInputType + " p) : COLOR\n"; testCode += "float4 psMain (" + m_CustomFunc.paramInputType + " p) : COLOR\n";
testCode += "{\n"; testCode += "{\n";

View File

@ -52,6 +52,9 @@ namespace Sound
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool SoundSystemDSPOpenAL::setParameter( int index, float value , bool integer) bool SoundSystemDSPOpenAL::setParameter( int index, float value , bool integer)
{ {
if(!CheckDspSupport())
return false;
if ( m_type != AL_FILTER_LOWPASS ) if ( m_type != AL_FILTER_LOWPASS )
{ {
if (integer) if (integer)
@ -75,6 +78,9 @@ namespace Sound
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool SoundSystemDSPOpenAL::setParameters( int index, float* pan) bool SoundSystemDSPOpenAL::setParameters( int index, float* pan)
{ {
if(!CheckDspSupport())
return false;
alEffectfv( m_uiFilter, index, pan); alEffectfv( m_uiFilter, index, pan);
return true; return true;
} }
@ -82,11 +88,15 @@ namespace Sound
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool SoundSystemDSPOpenAL::init(ALuint type) bool SoundSystemDSPOpenAL::init(ALuint type)
{ {
if(!CheckDspSupport())
return false;
// Clear AL Error State // Clear AL Error State
alGetError(); alGetError();
ALboolean result = ALFWIsEFXSupported(); ALboolean result = ALFWIsEFXSupported();
n_assert(result == AL_TRUE); if( result == AL_FALSE )
return false;
alGenAuxiliaryEffectSlots(1, &m_uiEffectSlot); alGenAuxiliaryEffectSlots(1, &m_uiEffectSlot);
if ( alGetError() != AL_NO_ERROR ) if ( alGetError() != AL_NO_ERROR )
@ -143,6 +153,9 @@ namespace Sound
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool SoundSystemDSPOpenAL::uninit() bool SoundSystemDSPOpenAL::uninit()
{ {
if(!CheckDspSupport())
return false;
if ( alIsFilter(m_uiFilter) ) if ( alIsFilter(m_uiFilter) )
alDeleteFilters( 1, &m_uiFilter ); alDeleteFilters( 1, &m_uiFilter );
@ -159,6 +172,9 @@ namespace Sound
bool SoundSystemDSPOpenAL::apply( SoundSystemSource* sss, int sendIndex) bool SoundSystemDSPOpenAL::apply( SoundSystemSource* sss, int sendIndex)
{ {
if(!CheckDspSupport())
return false;
m_sendIndex = sendIndex; m_sendIndex = sendIndex;
if(sss) if(sss)
@ -204,6 +220,9 @@ namespace Sound
bool SoundSystemDSPOpenAL::unapply( SoundSystemSource* sss ) bool SoundSystemDSPOpenAL::unapply( SoundSystemSource* sss )
{ {
if(!CheckDspSupport())
return false;
if(sss) if(sss)
{ {
ALuint uiSource = NULL; ALuint uiSource = NULL;
@ -222,5 +241,16 @@ namespace Sound
return false; return false;
} }
bool SoundSystemDSPOpenAL::CheckDspSupport()
{
ALCcontext* pContext = alcGetCurrentContext();
ALCdevice* pDevice = alcGetContextsDevice(pContext);
if(!alcIsExtensionPresent(pDevice, (ALCchar*)ALC_EXT_EFX_NAME))
return false;
return true;
}
} }
#endif // __USE_AUDIO__ || __GENESIS_EDITOR__ #endif // __USE_AUDIO__ || __GENESIS_EDITOR__

View File

@ -52,6 +52,8 @@ namespace Sound
int GetSendIndex() { return m_sendIndex; } int GetSendIndex() { return m_sendIndex; }
protected: protected:
bool CheckDspSupport();
ALuint m_type; ALuint m_type;
ALuint m_uiEffectSlot; // effect slot ALuint m_uiEffectSlot; // effect slot
ALuint m_uiFilter; // filter ALuint m_uiFilter; // filter

View File

@ -485,8 +485,8 @@ namespace Sound
bool SoundSystemOpenAL::createDSPByType( ALuint type, GPtr<SoundSystemDSP>& dsp ) bool SoundSystemOpenAL::createDSPByType( ALuint type, GPtr<SoundSystemDSP>& dsp )
{ {
dsp = SoundSystemDSPOpenAL::Create(); dsp = SoundSystemDSPOpenAL::Create();
dsp->init(type); bool result = dsp->init(type);
return true; return result;
} }
} }

View File

@ -24,7 +24,7 @@ THE SOFTWARE.
#ifndef __SPRITE_MESH_H__ #ifndef __SPRITE_MESH_H__
#define __SPRITE_MESH_H__ #define __SPRITE_MESH_H__
#include "foundation/core/refcounted.h" #include "foundation/core/refcounted.h"
#include "foundation/Util/array.h" #include "foundation/util/array.h"
#include "foundation/math/size.h" #include "foundation/math/size.h"
#include "foundation/math/float3.h" #include "foundation/math/float3.h"
#include "foundation/math/color.h" #include "foundation/math/color.h"

View File

@ -32,7 +32,7 @@ THE SOFTWARE.
#elif __PS3__ #elif __PS3__
#include "core/ps3/precompiled.h" #include "core/ps3/precompiled.h"
#elif __OSX__ #elif __OSX__
#include "core/OSX/precompiled.h" #include "core/osx/precompiled.h"
#elif __ANDROID__ #elif __ANDROID__
#include "core/android/precompiled.h" #include "core/android/precompiled.h"
#else #else

View File

@ -950,29 +950,45 @@ namespace Terrain
} }
void TerrainDataSource::GetColorMapData(Math::Color32* buffer,const int xStart /* = 0 */,const int yStart /* = 0 */,const int width /* = -1 */,const int height /* = -1 */) void TerrainDataSource::GetColorMapData(Math::Color32* buffer,const int xStart /* = 0 */,const int yStart /* = 0 */,const int width /* = -1 */,const int height /* = -1 */)
{ {
if(GetImagesData(mColorMap,xStart,yStart,width,height,buffer,COLOR32)) if (mColorMap.isvalid())
return; {
memset (buffer, 0, width * height * sizeof(Math::Color32)); if(GetImagesData(mColorMap,xStart,yStart,width,height,buffer,COLOR32))
return;
}
else
{
memset (buffer, 0, width * height * sizeof(Math::Color32));
}
} }
void TerrainDataSource::GetColorMapData(Math::ColorF* buffer,const int xStart /* = 0 */,const int yStart /* = 0 */,const int width /* = -1 */,const int height /* = -1 */) void TerrainDataSource::GetColorMapData(Math::ColorF* buffer,const int xStart /* = 0 */,const int yStart /* = 0 */,const int width /* = -1 */,const int height /* = -1 */)
{ {
if(GetImagesData(mColorMap,xStart,yStart,width,height,buffer,COLORF)) if (mColorMap.isvalid())
return; {
memset (buffer, 0, width * height * sizeof(Math::ColorF)); if(GetImagesData(mColorMap,xStart,yStart,width,height,buffer,COLORF))
return;
}
else
{
memset (buffer, 0, width * height * sizeof(Math::ColorF));
}
} }
void TerrainDataSource::SetColorMapData(Math::ColorF* buffer,const int xStart /* = 0 */,const int yStart /* = 0 */,const int width /* = -1 */,const int height /* = -1 */) void TerrainDataSource::SetColorMapData(Math::ColorF* buffer,const int xStart /* = 0 */,const int yStart /* = 0 */,const int width /* = -1 */,const int height /* = -1 */)
{ {
SetImagesData(mColorMap,xStart,yStart,width,height,buffer,COLORF); if (mColorMap.isvalid())
if (mColorMap) {
SetImagesData(mColorMap,xStart,yStart,width,height,buffer,COLORF);
Graphic::GraphicSystem::Instance()->UpdateTexture(mColorMap->GetHandle(), &_UpdateTextureFunction, mColorMap); Graphic::GraphicSystem::Instance()->UpdateTexture(mColorMap->GetHandle(), &_UpdateTextureFunction, mColorMap);
//RefreshBasemap(xStart,yStart,width,height); }
} }
void TerrainDataSource::SetColorMapData(Math::Color32* buffer,const int xStart /* = 0 */,const int yStart /* = 0 */,const int width /* = -1 */,const int height /* = -1 */) void TerrainDataSource::SetColorMapData(Math::Color32* buffer,const int xStart /* = 0 */,const int yStart /* = 0 */,const int width /* = -1 */,const int height /* = -1 */)
{ {
SetImagesData(mColorMap,xStart,yStart,width,height,buffer,COLOR32); if (mColorMap.isvalid())
if (mColorMap) {
SetImagesData(mColorMap,xStart,yStart,width,height,buffer,COLOR32);
Graphic::GraphicSystem::Instance()->UpdateTexture(mColorMap->GetHandle(), &_UpdateTextureFunction, mColorMap); Graphic::GraphicSystem::Instance()->UpdateTexture(mColorMap->GetHandle(), &_UpdateTextureFunction, mColorMap);
//RefreshBasemap(xStart,yStart,width,height); }
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
//other unclassify methods //other unclassify methods
@ -1053,10 +1069,29 @@ namespace Terrain
height = texture->GetHeight() - yStart; height = texture->GetHeight() - yStart;
} }
n_assert( xStart >= 0 && xStart < texture->GetWidth() && "xStart is invalid" ); if( !(xStart >= 0 && xStart < texture->GetWidth()) )
n_assert( yStart >= 0 && yStart < texture->GetHeight() && "yStart is invalid" ); {
n_assert( width >= 1 && width + xStart <= texture->GetWidth() && "width is invalid"); n_warning("This operation is invalid");
n_assert( height >= 1 && height + yStart <= texture->GetHeight() && "height is invalid"); return false;
}
if( !(yStart >= 0 && yStart < texture->GetHeight()) )
{
n_warning("This operation is invalid");
return false;
}
if( !(width >= 1 && width + xStart <= texture->GetWidth()) )
{
n_warning("This operation is invalid");
return false;
}
if( !(height >= 1 && height + yStart <= texture->GetHeight()) )
{
n_warning("This operation is invalid");
return false;
}
if (datatype == COLORF) if (datatype == COLORF)
{ {

View File

@ -190,6 +190,12 @@ namespace Vegetation
Util::FixedArray<uchar>& GetIndices(); Util::FixedArray<uchar>& GetIndices();
void GetReferenceResourceId(Util::Array<Resources::ReferenceResource>& list) const; void GetReferenceResourceId(Util::Array<Resources::ReferenceResource>& list) const;
#ifdef __GENESIS_EDITOR__
void SetEditorVisible(bool bVis);
bool IsVisible() const;
#endif
protected: protected:
void _onActive(void); void _onActive(void);
void _onDeactive(void); void _onDeactive(void);
@ -238,6 +244,9 @@ namespace Vegetation
friend class VegetationServer; friend class VegetationServer;
#ifdef __GENESIS_EDITOR__
bool m_bEditorVis;
#endif
}; };
//-------------------------------------------------------------------------------- //--------------------------------------------------------------------------------
@ -353,6 +362,18 @@ namespace Vegetation
{ {
return m_indices; return m_indices;
} }
#ifdef __GENESIS_EDITOR__
inline void VegetationObject::SetEditorVisible(bool bVis)
{
m_bEditorVis = bVis;
}
inline bool VegetationObject::IsVisible() const
{
return m_bEditorVis;
}
#endif
} }
#endif //__VEGETATION_OBJECT_H__ #endif //__VEGETATION_OBJECT_H__

View File

@ -254,6 +254,7 @@ SET ( SCRIPTFEATURE_HEADER_FILES
scriptfeature/script_root_instance.h scriptfeature/script_root_instance.h
scriptfeature/script_IAP_instance.h scriptfeature/script_IAP_instance.h
scriptfeature/script_render_buffer_filter.h scriptfeature/script_render_buffer_filter.h
scriptfeature/script_app.h
) )
@ -273,6 +274,7 @@ SET ( SCRIPTFEATURE_SOURCE_FILES
scriptfeature/script_root_instance.cc scriptfeature/script_root_instance.cc
scriptfeature/script_IAP_instance.cc scriptfeature/script_IAP_instance.cc
scriptfeature/script_render_buffer_filter.cc scriptfeature/script_render_buffer_filter.cc
scriptfeature/script_app.cc
) )
#scriptfeature inc folder #scriptfeature inc folder
@ -394,7 +396,12 @@ SET ( GUIFEATURE_FILES
guifeature/FontFeature.h guifeature/FontFeature.h
guifeature/FontFeature.cc guifeature/FontFeature.cc
)
SET ( JNI_FILES
Jni/imejni.h
Jni/imejni.cc
Jni/jnihelper.h
Jni/jnihelper.cc
) )
SET ( GUIBIND_FILES SET ( GUIBIND_FILES
guibind/scriptbind_gui.cc guibind/scriptbind_gui.cc
@ -669,6 +676,11 @@ SOURCE_GROUP(
FILES FILES
${GUIFEATURE_FILES} ${GUIFEATURE_FILES}
) )
SOURCE_GROUP(
"Jni"
FILES
${JNI_FILES}
)
SOURCE_GROUP( SOURCE_GROUP(
"GuiBind" "GuiBind"
FILES FILES
@ -815,6 +827,7 @@ ADD_LIBRARY(
${SPRITEBACTH_FILES} ${SPRITEBACTH_FILES}
${GUIFEATURE_FILES} ${GUIFEATURE_FILES}
${GUIBIND_FILES} ${GUIBIND_FILES}
${JNI_FILES}
) )
#Organize projects into folders #Organize projects into folders

181
Engine/app/Jni/Jnihelper.cc Normal file
View File

@ -0,0 +1,181 @@
/****************************************************************************
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
#if __ANDROID__
#include "stdneb.h"
#include "jnihelper.h"
#include <string.h>
#include "players/GenesisA/simplegameapplication.h"
namespace App
{
//////////////////////////////////////////////////////////////////////////
// java vm helper function
//////////////////////////////////////////////////////////////////////////
static bool getEnv(JNIEnv **env)
{
bool bRet = true;
*env = Genesis::DemoPublishGameApplication::Instance()->GetJNIEvn();
return bRet;
}
bool JniHelper::GetEnv(JNIEnv **env)
{
return getEnv(env);
}
static jclass getClassID_(const char *className, JNIEnv *env)
{
JNIEnv *pEnv = env;
jclass ret = 0;
do
{
if (! pEnv)
{
if (! getEnv(&pEnv))
{
break;
}
}
ret = pEnv->FindClass(className);
if (! ret)
{
n_warning("Failed to find class of %s", className);
break;
}
} while (0);
return ret;
}
static bool getStaticMethodInfo_(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode)
{
jmethodID methodID = 0;
JNIEnv *pEnv = 0;
bool bRet = false;
do
{
if (! getEnv(&pEnv))
{
break;
}
jclass classID = getClassID_(className, pEnv);
methodID = pEnv->GetStaticMethodID(classID, methodName, paramCode);
if (! methodID)
{
n_warning("Failed to find static method id of %s", methodName);
break;
}
methodinfo.classID = classID;
methodinfo.env = pEnv;
methodinfo.methodID = methodID;
bRet = true;
} while (0);
return bRet;
}
static bool getMethodInfo_(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode)
{
jmethodID methodID = 0;
JNIEnv *pEnv = 0;
bool bRet = false;
do
{
if (! getEnv(&pEnv))
{
break;
}
jclass classID = getClassID_(className, pEnv);
methodID = pEnv->GetMethodID(classID, methodName, paramCode);
if (! methodID)
{
n_warning("Failed to find method id of %s", methodName);
break;
}
methodinfo.classID = classID;
methodinfo.env = pEnv;
methodinfo.methodID = methodID;
bRet = true;
} while (0);
return bRet;
}
static std::string jstring2string_(jstring jstr)
{
if (jstr == NULL)
{
return "";
}
JNIEnv *env = 0;
if (! getEnv(&env))
{
return 0;
}
const char* chars = env->GetStringUTFChars(jstr, NULL);
std::string ret(chars);
env->ReleaseStringUTFChars(jstr, chars);
return ret;
}
//////////////////////////////////////////////////////////////
jclass JniHelper::GetClassID(const char *className, JNIEnv *env)
{
return getClassID_(className, env);
}
bool JniHelper::GetStaticMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode)
{
return getStaticMethodInfo_(methodinfo, className, methodName, paramCode);
}
bool JniHelper::GetMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode)
{
return getMethodInfo_(methodinfo, className, methodName, paramCode);
}
std::string JniHelper::jstring2string(jstring str)
{
return jstring2string_(str);
}
}
#endif

View File

@ -0,0 +1,56 @@
/****************************************************************************
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
#ifndef __JNI_HELPER_H__
#define __JNI_HELPER_H__
#if __ANDROID__
#include <jni.h>
#include <string>
namespace App
{
typedef struct JniMethodInfo_
{
JNIEnv * env;
jclass classID;
jmethodID methodID;
} JniMethodInfo;
class JniHelper
{
public:
static bool GetEnv(JNIEnv **env);
static jclass GetClassID(const char *className, JNIEnv *env=0);
static bool GetStaticMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);
static bool GetMethodInfo(JniMethodInfo &methodinfo, const char *className, const char *methodName, const char *paramCode);
static std::string jstring2string(jstring str);
private:
};
}
#endif
#endif // __JNI_HELPER_H__

67
Engine/app/Jni/imejni.cc Normal file
View File

@ -0,0 +1,67 @@
/****************************************************************************
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
#if __ANDROID__
#include "imejni.h"
#include <string.h>
#include <jni.h>
#include "Jnihelper.h"
namespace App
{
static char* s_classname= "org/genesis/lib/GenesisGLSurfaceView";
void IMEJni::ShowKeyboardJNI(int bOpen)
{
if (bOpen)
{
IMEJni::OpenKeyboardJNI();
}
else
{
IMEJni::CloseKeyboardJNI();
}
}
void IMEJni::OpenKeyboardJNI()
{
JniMethodInfo t;
if (JniHelper::GetStaticMethodInfo(t, s_classname, "openIMEKeyboard", "()V")) {
t.env->CallStaticVoidMethod(t.classID, t.methodID);
t.env->DeleteLocalRef(t.classID);
}
}
void IMEJni::CloseKeyboardJNI()
{
JniMethodInfo t;
if (JniHelper::GetStaticMethodInfo(t, s_classname, "closeIMEKeyboard", "()V")) {
t.env->CallStaticVoidMethod(t.classID, t.methodID);
t.env->DeleteLocalRef(t.classID);
}
}
}
#endif

39
Engine/app/Jni/imejni.h Normal file
View File

@ -0,0 +1,39 @@
/****************************************************************************
Copyright (c) 2011-2013,WebJet Business Division,CYOU
http://www.genesis-3d.com.cn
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
#ifndef __IME_JNI_H__
#define __IME_JNI_H__
namespace App
{
class IMEJni
{
public:
static void ShowKeyboardJNI(int bOpen);
static void OpenKeyboardJNI();
static void CloseKeyboardJNI();
};
}
#endif // __IME_JNI_H__

View File

@ -52,6 +52,7 @@ __ImplementClass(App::Actor, 'GACT', Core::RefCounted);
uint Actor::s_fastIdCounter = 0; uint Actor::s_fastIdCounter = 0;
const GPtr<Actor> Actor::NullActor; const GPtr<Actor> Actor::NullActor;
const ActorPropertySet ActorPropertySet::s_defaultVal;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
/** /**
*/ */
@ -61,6 +62,7 @@ Actor::Actor() :
mActivated(false), mActivated(false),
mActiveControl(false), mActiveControl(false),
mTemplateName(""), mTemplateName(""),
mModelName(""),
mIsLinkTemplate(false), mIsLinkTemplate(false),
mLayerID(eSL_Defualt), mLayerID(eSL_Defualt),
mTagID(1), mTagID(1),
@ -79,7 +81,6 @@ Actor::Actor() :
#ifdef __GENESIS_EDITOR__ #ifdef __GENESIS_EDITOR__
mQueryMask(0), mQueryMask(0),
mFrozen(false), mFrozen(false),
mLocked(false),
#endif #endif
mEditorFlag(0), mEditorFlag(0),
mPriority(ResourcePriority::Undefinition) mPriority(ResourcePriority::Undefinition)
@ -159,9 +160,23 @@ Actor::_Destory(bool forceShutDown )
//------------------------------------------------------------------------ //------------------------------------------------------------------------
void Actor::SetLayerID(LayerID id) void Actor::SetLayerID(LayerID id)
{ {
if (id == mLayerID)
return;
n_assert(id < 32); n_assert(id < 32);
n_assert(0 <= id); n_assert(0 <= id);
mLayerID = id; mLayerID = id;
#if __USE_PHYSX__ || __GENESIS_EDITOR__
//从脚本设置的话需要更新物理形状的groupId
GPtr<PhysicsBodyComponent> com = FindComponent<PhysicsBodyComponent>();
if(com.isvalid() && com->GetEntity()->IsValid())
{
com->GetEntity()->SetGroupID(id);
}
#endif
IndexT i; IndexT i;
for (i = 0; i < this->mComponents.Size(); ++i) for (i = 0; i < this->mComponents.Size(); ++i)
{ {
@ -1055,7 +1070,16 @@ Actor::AttachComponent(const GPtr<Component>& prop)
{ {
n_assert(0 != prop); n_assert(0 != prop);
this->mComponents.Append(prop); //修复bug252 脚本组件应当放在最后
SizeT len = mComponents.Size();
if (len > 0 && mComponents[len-1]->IsA(ScriptComponent::RTTI))
{
mComponents.Insert(len-1, prop);
}
else
{
mComponents.Append(prop);
}
prop->_SetActor(this); prop->_SetActor(this);
prop->SetupAllResource(); prop->SetupAllResource();
if ( IsActive()) if ( IsActive())
@ -1372,7 +1396,7 @@ void Actor::SetActiveStateForTemplate()
} }
//------------------------------------------------------------------------ //------------------------------------------------------------------------
void Actor::CopyFrom( const GPtr<Actor>& pSource, bool includePrivateProperty, bool isTemplate , bool needRecurVFL ) void Actor::CopyFrom( const GPtr<Actor>& pSource,const ActorPropertySet& actorPropertySet, bool includePrivateProperty, bool isTemplate , bool needRecurVFL )
{ {
//#ifdef _DEBUG //#ifdef _DEBUG
// mCopyedActor = 1; // mCopyedActor = 1;
@ -1437,7 +1461,7 @@ void Actor::CopyFrom( const GPtr<Actor>& pSource, bool includePrivateProperty, b
mChildren[i] = pNewChild; mChildren[i] = pNewChild;
} }
n_assert( mChildren[i].isvalid() ); n_assert( mChildren[i].isvalid() );
mChildren[i]->CopyFrom( pSourceChild, true , isTemplate , needRecurVFL); // Dest Child is just Create, Copy All from Source Child mChildren[i]->CopyFrom( pSourceChild,ActorPropertySet::s_defaultVal, true , isTemplate , needRecurVFL); // Dest Child is just Create, Copy All from Source Child
} }
} }
@ -1455,52 +1479,85 @@ void Actor::CopyFrom( const GPtr<Actor>& pSource, bool includePrivateProperty, b
AttachComponent( pDestCom ); AttachComponent( pDestCom );
} }
} }
//更新 新加入的Component的显示属性
SetVisible(pSource->GetVisible(), needRecurVFL);
#ifdef __GENESIS_EDITOR__
SetFrozen(pSource->GetFrozen(), needRecurVFL);
SetLocked(pSource->GetLocked(), needRecurVFL);
#endif
SetLocalBoundingBox(pSource->GetLocalBoundingBox());
SetTemplateName( pSource->GetTemplateName() );
_CopyFrom_MustProperty(pSource,needRecurVFL);
if ( includePrivateProperty ) if ( includePrivateProperty )
{ {
// copy actor property, just serialization's property need copy // copy actor property, just serialization's property need copy
//SetVisible(pSource->GetVisible()); //SetVisible(pSource->GetVisible());
_CopyFrom_IncludeProperty(pSource,actorPropertySet);
if ( pSource->GetActiveControl() )
Active();
else
Deactive();
SetName( pSource->GetName() );
SetLinkTemplate( pSource->IsLinkTemplate() );
SetLayerID( pSource->GetLayerID() );
SetTagID( pSource->GetTagID() );
SetTransform( pSource->GetPosition(), pSource->GetRotation(), pSource->GetScale() );
// for templatedActors
SetTmpActiveState( pSource->IsActive() );
#ifdef __GENESIS_EDITOR__
SetQueryMask(pSource->GetQueryMask());
#endif
SetEditorFlag( pSource->GetEditorFlag() );
} }
if (isTemplate) if (isTemplate)
{ {
SetLayerID( pSource->GetLayerID() ); _CopyFrom_CommonProperty(pSource,actorPropertySet);
SetTagID( pSource->GetTagID() );
SetTransform( this->GetPosition(), this->GetRotation(), this->GetScale() );
SetTmpActiveState( pSource->IsActive() );
#ifdef __GENESIS_EDITOR__
SetQueryMask(pSource->GetQueryMask());
#endif
SetEditorFlag( pSource->GetEditorFlag() );
} }
} }
//------------------------------------------------------------------------
void Actor::_CopyFrom_MustProperty( const GPtr<Actor>& pSource, bool needRecurVFL)
{
//更新 新加入的Component的显示属性
SetVisible(pSource->GetVisible(), needRecurVFL);
#ifdef __GENESIS_EDITOR__
SetFrozen(pSource->GetFrozen(), needRecurVFL);
#endif
SetLocalBoundingBox(pSource->GetLocalBoundingBox());
SetTemplateName( pSource->GetTemplateName() );
SetModelName(pSource->GetModelName());
}
//------------------------------------------------------------------------
void Actor::_CopyFrom_IncludeProperty( const GPtr<Actor>& pSource,const ActorPropertySet& actorPropertySet)
{
if ( pSource->GetActiveControl() )
Active();
else
Deactive();
bool bRootTemplateActor = actorPropertySet.TestFlag(ActorPropertySet::logic_exclusive_RootActorName) &&
this->GetTemplateName().IsValid() &&
(!this->GetParent() || this->GetParent() && !this->GetParent()->GetTemplateName().IsValid());
if ( !bRootTemplateActor )
{
SetName( pSource->GetName() );
}
SetLinkTemplate( pSource->IsLinkTemplate() );
_CopyFrom_CommonProperty(pSource,actorPropertySet);
if ( actorPropertySet.TestFlag(ActorPropertySet::logic_exclusive_pos_rot) )
{
SetTransform( this->GetPosition(), this->GetRotation(), pSource->GetScale() );
}
else
{
SetTransform( pSource->GetPosition(), pSource->GetRotation(), pSource->GetScale() );
}
SetPriority(pSource->GetPriority());
}
//------------------------------------------------------------------------
void Actor::_CopyFrom_TemplateProperty( const GPtr<Actor>& pSource,const ActorPropertySet& actorPropertySet)
{
_CopyFrom_CommonProperty(pSource,actorPropertySet);
SetTransform( this->GetPosition(), this->GetRotation(), this->GetScale() );
}
//------------------------------------------------------------------------
void Actor::_CopyFrom_CommonProperty( const GPtr<Actor>& pSource,const ActorPropertySet& actorPropertySet)
{
SetLayerID( pSource->GetLayerID() );
SetTagID( pSource->GetTagID() );
SetTmpActiveState( pSource->IsActive() );
#ifdef __GENESIS_EDITOR__
SetQueryMask(pSource->GetQueryMask());
#endif
SetEditorFlag( pSource->GetEditorFlag() );
}
//------------------------------------------------------------------------ //------------------------------------------------------------------------
void void
Actor::SetPriority( const Resources::Priority priority ) Actor::SetPriority( const Resources::Priority priority )
@ -1632,15 +1689,33 @@ Actor::FindChildIndex(FastId id) const
} }
//------------------------------------------------------------------------ //------------------------------------------------------------------------
const GPtr<Actor>& const GPtr<Actor>&
Actor::FindChild(FastId id) const Actor::FindChild(FastId id, bool includeGrandson) const
{ {
IndexT findIndex = FindChildIndex(id); SizeT count = mChildren.Size();
return GetChild( findIndex ); for ( IndexT index = 0; index < count; ++index )
{
if ( mChildren[index]->GetFastId() == id )
{
return mChildren[index];
}
}
if (includeGrandson)
{
for ( IndexT index = 0; index < count; ++index )
{
const GPtr<Actor>& result = mChildren[index]->FindChild(id, includeGrandson);
if (result.isvalid())
{
return result;
}
}
}
return NullActor;
} }
//------------------------------------------------------------------------ //------------------------------------------------------------------------
const GPtr<Actor>& const GPtr<Actor>&
Actor::FindChildByTag(App::TagID id) const Actor::FindChildByTag(App::TagID id, bool includeGrandson) const
{ {
// @todo may be need optimize, eg. Binary Search // @todo may be need optimize, eg. Binary Search
SizeT count = mChildren.Size(); SizeT count = mChildren.Size();
@ -1651,10 +1726,21 @@ Actor::FindChildByTag(App::TagID id) const
return mChildren[index]; return mChildren[index];
} }
} }
if (includeGrandson)
{
for ( IndexT index = 0; index < count; ++index )
{
const GPtr<Actor>& result = mChildren[index]->FindChildByTag(id, includeGrandson);
if (result.isvalid())
{
return result;
}
}
}
return NullActor; return NullActor;
} }
//------------------------------------------------------------------------ //------------------------------------------------------------------------
void Actor::FindChildrenByTag(const App::TagID id,Util::Array< GPtr<Actor> >& actors) const void Actor::FindChildrenByTag(const App::TagID id,Util::Array< GPtr<Actor> >& actors, bool includeGrandson) const
{ {
SizeT count = mChildren.Size(); SizeT count = mChildren.Size();
for ( IndexT index = 0; index < count; ++index ) for ( IndexT index = 0; index < count; ++index )
@ -1663,10 +1749,14 @@ void Actor::FindChildrenByTag(const App::TagID id,Util::Array< GPtr<Actor> >& ac
{ {
actors.Append(mChildren[index]); actors.Append(mChildren[index]);
} }
if (includeGrandson)
{
mChildren[index]->FindChildrenByTag(id, actors, includeGrandson);
}
} }
} }
const GPtr<Actor>& const GPtr<Actor>&
Actor::FindChild(const Util::String& name) const Actor::FindChild(const Util::String& name, bool includeGrandson) const
{ {
// @todo may be need optimize, eg. Binary Search // @todo may be need optimize, eg. Binary Search
SizeT count = mChildren.Size(); SizeT count = mChildren.Size();
@ -1677,12 +1767,24 @@ const GPtr<Actor>&
return mChildren[index]; return mChildren[index];
} }
} }
if (includeGrandson)
{
for ( IndexT index = 0; index < count; ++index )
{
const GPtr<Actor>& result = mChildren[index]->FindChild(name, includeGrandson);
if (result.isvalid())
{
return result;
}
}
}
return NullActor; return NullActor;
} }
//------------------------------------------------------------------------ //------------------------------------------------------------------------
const GPtr<Actor>& const GPtr<Actor>&
Actor::FindChild(const Util::Guid& guid) const Actor::FindChild(const Util::Guid& guid, bool includeGrandson) const
{ {
// @todo may be need optimize, eg. Binary Search // @todo may be need optimize, eg. Binary Search
SizeT count = mChildren.Size(); SizeT count = mChildren.Size();
@ -1693,6 +1795,18 @@ Actor::FindChild(const Util::Guid& guid) const
return mChildren[index]; return mChildren[index];
} }
} }
if (includeGrandson)
{
for ( IndexT index = 0; index < count; ++index )
{
const GPtr<Actor>& result = mChildren[index]->FindChild(guid, includeGrandson);
if (result.isvalid())
{
return result;
}
}
}
return NullActor; return NullActor;
} }
@ -1784,27 +1898,12 @@ Actor::_DirtyWorldTransform()
// dirty child // dirty child
GPtr<Actor> children; GPtr<Actor> children;
#ifdef __GENESIS_EDITOR__
bool bLocked = false;
#endif
SizeT numActor = mChildren.Size(); SizeT numActor = mChildren.Size();
for ( IndexT i = 0; i < numActor; ++i ) for ( IndexT i = 0; i < numActor; ++i )
{ {
children = mChildren[i]; children = mChildren[i];
#ifdef __GENESIS_EDITOR__
/*子actor处于锁定状态时其世界坐标不应该跟着父actor的变换而变换
*/
bLocked = children->GetLocked();
if ( bLocked )
{
const Actor *parent = children->GetParent();
children->SetLockedActorLocalTransform(parent);
continue;
}
#endif
children->_DirtyWorldTransform(); children->_DirtyWorldTransform();
} }
} }
@ -1884,29 +1983,8 @@ Actor::SaveTerrainFile(void) const
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
#ifdef __GENESIS_EDITOR__ #ifdef __GENESIS_EDITOR__
void Actor::SetLocked(bool bLocked , bool needRecursive/* = true*/)
{
mLocked = bLocked;
if (needRecursive)
{
SizeT count = mChildren.Size();
for ( IndexT index = 0; index < count; ++index )
{
mChildren[index]->SetLocked(bLocked);
}
}
}
//------------------------------------------------------------------------------
void Actor::SetLockedActorTransformRecursive(const GPtr<App::Actor>& pSource)
{
n_assert(pSource);
SetTransform(pSource->GetPosition(),pSource->GetRotation(),pSource->GetScale());
SizeT count = mChildren.Size();
for ( IndexT index = 0; index < count; ++index )
{
mChildren[index]->SetLockedActorTransformRecursive(pSource->GetChild(index));
}
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void Actor::SetFrozen(bool bFrozen , bool needRecursive/* = true*/) void Actor::SetFrozen(bool bFrozen , bool needRecursive/* = true*/)
{ {
@ -1934,8 +2012,12 @@ void Actor::SetVisible( bool bVisible , bool needRecursive /*= true*/ )
{ {
GPtr<RenderComponent> renderCom = coms[i].downcast<RenderComponent>(); GPtr<RenderComponent> renderCom = coms[i].downcast<RenderComponent>();
n_assert(renderCom.isvalid()); n_assert(renderCom.isvalid());
#ifdef __GENESIS_EDITOR__
renderCom->SetEditorVisible(bVisible);
#else
renderCom->SetVisible(bVisible); renderCom->SetVisible(bVisible);
#endif
} }
} }
@ -1950,7 +2032,11 @@ void Actor::SetVisible( bool bVisible , bool needRecursive /*= true*/ )
{ {
continue; continue;
} }
#ifdef __GENESIS_EDITOR__
vegeRenderCom->SetEditorVisible(bVisible);
#else
vegeRenderCom->SetVisible(bVisible); vegeRenderCom->SetVisible(bVisible);
#endif
} }
} }
if (needRecursive) if (needRecursive)
@ -1963,6 +2049,7 @@ void Actor::SetVisible( bool bVisible , bool needRecursive /*= true*/ )
} }
//暂未处理其它component对显示隐藏属性的响应如相机、灯光、声音、粒子 //暂未处理其它component对显示隐藏属性的响应如相机、灯光、声音、粒子
return; return;
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
bool Actor::GetVisible() const bool Actor::GetVisible() const
@ -1985,32 +2072,7 @@ bool Actor::IsChildOfAnimationActor()
} }
return false; return false;
} }
//------------------------------------------------------------------------
/*设置锁定actor的局部坐标时是不需要调_DirtyWorldTransform()函数的,因为
*/
#ifdef __GENESIS_EDITOR__
void Actor::SetLockedActorLocalTransform( const Actor *parent )
{
if ( parent )
{
const Math::matrix44 &parentWT = parent->GetWorldTransform();
Math::matrix44 inversepw = Math::matrix44::inverse(parentWT);
const Math::matrix44 &worldTransform = GetWorldTransform();
mLocaTrans = Math::matrix44::multiply( inversepw , worldTransform );
mLocaTrans.setrow3( Math::float4(0.0f,0.0f,0.0f,1.0f));
mLocaTrans.decompose( mLocalScale, mLocalRotation, mLocalPosition );
return;
}
else
{
mLocalPosition = mWorldPosition;
mLocalRotation = mWorldRotation;
mLocalScale = mWorldScale;
mLocaTrans = mWorldTrans;
}
}
#endif
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
#if NEBULA3_ENABLE_PROFILING #if NEBULA3_ENABLE_PROFILING
//------------------------------------------------------------------------ //------------------------------------------------------------------------

Some files were not shown because too many files have changed in this diff Show More