mirror of https://github.com/axmolengine/axmol.git
Merge pull request #15853 from ricardoquesada/vr_squashed
Squashed commit of the following:
This commit is contained in:
commit
6778ebf451
|
@ -1426,6 +1426,12 @@
|
|||
5027253B190BF1B900AAF4ED /* cocos2d.h in Headers */ = {isa = PBXBuildFile; fileRef = 50272538190BF1B900AAF4ED /* cocos2d.h */; };
|
||||
5027253C190BF1B900AAF4ED /* cocos2d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50272539190BF1B900AAF4ED /* cocos2d.cpp */; };
|
||||
5027253D190BF1B900AAF4ED /* cocos2d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50272539190BF1B900AAF4ED /* cocos2d.cpp */; };
|
||||
502AF9781D0711B8006AF256 /* CCVRGenericHeadTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 502AF9771D0711B8006AF256 /* CCVRGenericHeadTracker.cpp */; };
|
||||
502AF9791D0711C9006AF256 /* CCVRGenericHeadTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 502AF9771D0711B8006AF256 /* CCVRGenericHeadTracker.cpp */; };
|
||||
502AF97A1D0711CA006AF256 /* CCVRGenericHeadTracker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 502AF9771D0711B8006AF256 /* CCVRGenericHeadTracker.cpp */; };
|
||||
5030C0421CE6DF8B00C5D3E7 /* CCVRGenericHeadTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5030C03E1CE6DF8B00C5D3E7 /* CCVRGenericHeadTracker.h */; };
|
||||
5030C0431CE6DF8B00C5D3E7 /* CCVRGenericHeadTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5030C03E1CE6DF8B00C5D3E7 /* CCVRGenericHeadTracker.h */; };
|
||||
5030C0441CE6DF8B00C5D3E7 /* CCVRGenericHeadTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5030C03E1CE6DF8B00C5D3E7 /* CCVRGenericHeadTracker.h */; };
|
||||
5034CA21191D591100CE6051 /* ccShader_PositionTextureColorAlphaTest.frag in Headers */ = {isa = PBXBuildFile; fileRef = 5034C9FB191D591000CE6051 /* ccShader_PositionTextureColorAlphaTest.frag */; };
|
||||
5034CA22191D591100CE6051 /* ccShader_PositionTextureColorAlphaTest.frag in Headers */ = {isa = PBXBuildFile; fileRef = 5034C9FB191D591000CE6051 /* ccShader_PositionTextureColorAlphaTest.frag */; };
|
||||
5034CA2B191D591100CE6051 /* ccShader_PositionTextureA8Color.vert in Headers */ = {isa = PBXBuildFile; fileRef = 5034CA00191D591000CE6051 /* ccShader_PositionTextureA8Color.vert */; };
|
||||
|
@ -1461,6 +1467,18 @@
|
|||
5034CA4A191D591100CE6051 /* ccShader_Label_df.frag in Headers */ = {isa = PBXBuildFile; fileRef = 5034CA0F191D591000CE6051 /* ccShader_Label_df.frag */; };
|
||||
5034CA4B191D591100CE6051 /* ccShader_Label_df_glow.frag in Headers */ = {isa = PBXBuildFile; fileRef = 5034CA10191D591000CE6051 /* ccShader_Label_df_glow.frag */; };
|
||||
5034CA4C191D591100CE6051 /* ccShader_Label_df_glow.frag in Headers */ = {isa = PBXBuildFile; fileRef = 5034CA10191D591000CE6051 /* ccShader_Label_df_glow.frag */; };
|
||||
503D4F631CE29D4E0054A2D1 /* CCVRDistortionMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 503D4F611CE29D4E0054A2D1 /* CCVRDistortionMesh.cpp */; };
|
||||
503D4F641CE29D4E0054A2D1 /* CCVRDistortionMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 503D4F611CE29D4E0054A2D1 /* CCVRDistortionMesh.cpp */; };
|
||||
503D4F651CE29D4E0054A2D1 /* CCVRDistortionMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 503D4F611CE29D4E0054A2D1 /* CCVRDistortionMesh.cpp */; };
|
||||
503D4F661CE29D4E0054A2D1 /* CCVRDistortionMesh.h in Headers */ = {isa = PBXBuildFile; fileRef = 503D4F621CE29D4E0054A2D1 /* CCVRDistortionMesh.h */; };
|
||||
503D4F671CE29D4E0054A2D1 /* CCVRDistortionMesh.h in Headers */ = {isa = PBXBuildFile; fileRef = 503D4F621CE29D4E0054A2D1 /* CCVRDistortionMesh.h */; };
|
||||
503D4F681CE29D4E0054A2D1 /* CCVRDistortionMesh.h in Headers */ = {isa = PBXBuildFile; fileRef = 503D4F621CE29D4E0054A2D1 /* CCVRDistortionMesh.h */; };
|
||||
503D4F6B1CE2BDBE0054A2D1 /* CCVRDistortion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 503D4F691CE2BDBE0054A2D1 /* CCVRDistortion.cpp */; };
|
||||
503D4F6C1CE2BDBE0054A2D1 /* CCVRDistortion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 503D4F691CE2BDBE0054A2D1 /* CCVRDistortion.cpp */; };
|
||||
503D4F6D1CE2BDBE0054A2D1 /* CCVRDistortion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 503D4F691CE2BDBE0054A2D1 /* CCVRDistortion.cpp */; };
|
||||
503D4F6E1CE2BDBE0054A2D1 /* CCVRDistortion.h in Headers */ = {isa = PBXBuildFile; fileRef = 503D4F6A1CE2BDBE0054A2D1 /* CCVRDistortion.h */; };
|
||||
503D4F6F1CE2BDBE0054A2D1 /* CCVRDistortion.h in Headers */ = {isa = PBXBuildFile; fileRef = 503D4F6A1CE2BDBE0054A2D1 /* CCVRDistortion.h */; };
|
||||
503D4F701CE2BDBE0054A2D1 /* CCVRDistortion.h in Headers */ = {isa = PBXBuildFile; fileRef = 503D4F6A1CE2BDBE0054A2D1 /* CCVRDistortion.h */; };
|
||||
503DD8E01926736A00CD74DD /* CCApplication-ios.h in Headers */ = {isa = PBXBuildFile; fileRef = 503DD8CE1926736A00CD74DD /* CCApplication-ios.h */; };
|
||||
503DD8E11926736A00CD74DD /* CCApplication-ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 503DD8CF1926736A00CD74DD /* CCApplication-ios.mm */; };
|
||||
503DD8E21926736A00CD74DD /* CCCommon-ios.mm in Sources */ = {isa = PBXBuildFile; fileRef = 503DD8D01926736A00CD74DD /* CCCommon-ios.mm */; };
|
||||
|
@ -3811,6 +3829,15 @@
|
|||
50ED2BE119BEAF7900A0AB90 /* UIEditBoxImpl-win32.h in Headers */ = {isa = PBXBuildFile; fileRef = 50ED2BDC19BEAF7900A0AB90 /* UIEditBoxImpl-win32.h */; };
|
||||
50ED2BE419BEAF7900A0AB90 /* UIEditBoxImpl-win32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50ED2BDE19BEAF7900A0AB90 /* UIEditBoxImpl-win32.cpp */; };
|
||||
50ED2BE519BEAF7900A0AB90 /* UIEditBoxImpl-win32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50ED2BDE19BEAF7900A0AB90 /* UIEditBoxImpl-win32.cpp */; };
|
||||
50F965511CD0360000ADE813 /* CCVRGenericRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50F9654E1CD0360000ADE813 /* CCVRGenericRenderer.cpp */; };
|
||||
50F965521CD0360000ADE813 /* CCVRGenericRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50F9654E1CD0360000ADE813 /* CCVRGenericRenderer.cpp */; };
|
||||
50F965531CD0360000ADE813 /* CCVRGenericRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 50F9654E1CD0360000ADE813 /* CCVRGenericRenderer.cpp */; };
|
||||
50F965541CD0360000ADE813 /* CCVRGenericRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 50F9654F1CD0360000ADE813 /* CCVRGenericRenderer.h */; };
|
||||
50F965551CD0360000ADE813 /* CCVRGenericRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 50F9654F1CD0360000ADE813 /* CCVRGenericRenderer.h */; };
|
||||
50F965561CD0360000ADE813 /* CCVRGenericRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 50F9654F1CD0360000ADE813 /* CCVRGenericRenderer.h */; };
|
||||
50F965571CD0360000ADE813 /* CCVRProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 50F965501CD0360000ADE813 /* CCVRProtocol.h */; };
|
||||
50F965581CD0360000ADE813 /* CCVRProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 50F965501CD0360000ADE813 /* CCVRProtocol.h */; };
|
||||
50F965591CD0360000ADE813 /* CCVRProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 50F965501CD0360000ADE813 /* CCVRProtocol.h */; };
|
||||
52B47A2E1A5349A3004E4C60 /* HttpAsynConnection-apple.h in Headers */ = {isa = PBXBuildFile; fileRef = 52B47A291A5349A3004E4C60 /* HttpAsynConnection-apple.h */; };
|
||||
52B47A2F1A5349A3004E4C60 /* HttpAsynConnection-apple.m in Sources */ = {isa = PBXBuildFile; fileRef = 52B47A2A1A5349A3004E4C60 /* HttpAsynConnection-apple.m */; };
|
||||
52B47A301A5349A3004E4C60 /* HttpClient-apple.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52B47A2B1A5349A3004E4C60 /* HttpClient-apple.mm */; };
|
||||
|
@ -6403,6 +6430,8 @@
|
|||
5012169F1AC473AD009A4BEA /* CCMaterial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCMaterial.h; sourceTree = "<group>"; };
|
||||
50272538190BF1B900AAF4ED /* cocos2d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cocos2d.h; path = ../cocos/cocos2d.h; sourceTree = "<group>"; };
|
||||
50272539190BF1B900AAF4ED /* cocos2d.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = cocos2d.cpp; path = ../cocos/cocos2d.cpp; sourceTree = "<group>"; };
|
||||
502AF9771D0711B8006AF256 /* CCVRGenericHeadTracker.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; path = CCVRGenericHeadTracker.cpp; sourceTree = "<group>"; };
|
||||
5030C03E1CE6DF8B00C5D3E7 /* CCVRGenericHeadTracker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCVRGenericHeadTracker.h; sourceTree = "<group>"; };
|
||||
5034C9FB191D591000CE6051 /* ccShader_PositionTextureColorAlphaTest.frag */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_PositionTextureColorAlphaTest.frag; sourceTree = "<group>"; };
|
||||
5034CA00191D591000CE6051 /* ccShader_PositionTextureA8Color.vert */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_PositionTextureA8Color.vert; sourceTree = "<group>"; };
|
||||
5034CA01191D591000CE6051 /* ccShader_PositionTextureA8Color.frag */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_PositionTextureA8Color.frag; sourceTree = "<group>"; };
|
||||
|
@ -6425,6 +6454,10 @@
|
|||
5034CA61191D91CF00CE6051 /* ccShader_PositionTextureColor.frag */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.glsl; path = ccShader_PositionTextureColor.frag; sourceTree = "<group>"; };
|
||||
5034CA62191D91CF00CE6051 /* ccShader_PositionTextureColor_noMVP.vert */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.glsl; path = ccShader_PositionTextureColor_noMVP.vert; sourceTree = "<group>"; };
|
||||
5034CA63191D91CF00CE6051 /* ccShader_PositionTextureColor_noMVP.frag */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.glsl; path = ccShader_PositionTextureColor_noMVP.frag; sourceTree = "<group>"; };
|
||||
503D4F611CE29D4E0054A2D1 /* CCVRDistortionMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCVRDistortionMesh.cpp; sourceTree = "<group>"; };
|
||||
503D4F621CE29D4E0054A2D1 /* CCVRDistortionMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCVRDistortionMesh.h; sourceTree = "<group>"; };
|
||||
503D4F691CE2BDBE0054A2D1 /* CCVRDistortion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCVRDistortion.cpp; sourceTree = "<group>"; };
|
||||
503D4F6A1CE2BDBE0054A2D1 /* CCVRDistortion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCVRDistortion.h; sourceTree = "<group>"; };
|
||||
503DD8CE1926736A00CD74DD /* CCApplication-ios.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "CCApplication-ios.h"; sourceTree = "<group>"; };
|
||||
503DD8CF1926736A00CD74DD /* CCApplication-ios.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "CCApplication-ios.mm"; sourceTree = "<group>"; };
|
||||
503DD8D01926736A00CD74DD /* CCCommon-ios.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "CCCommon-ios.mm"; sourceTree = "<group>"; };
|
||||
|
@ -6690,6 +6723,9 @@
|
|||
50E6D33318E174130051CA34 /* UIVBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIVBox.h; sourceTree = "<group>"; };
|
||||
50ED2BDC19BEAF7900A0AB90 /* UIEditBoxImpl-win32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIEditBoxImpl-win32.h"; sourceTree = "<group>"; };
|
||||
50ED2BDE19BEAF7900A0AB90 /* UIEditBoxImpl-win32.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "UIEditBoxImpl-win32.cpp"; sourceTree = "<group>"; };
|
||||
50F9654E1CD0360000ADE813 /* CCVRGenericRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCVRGenericRenderer.cpp; sourceTree = "<group>"; };
|
||||
50F9654F1CD0360000ADE813 /* CCVRGenericRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCVRGenericRenderer.h; sourceTree = "<group>"; };
|
||||
50F965501CD0360000ADE813 /* CCVRProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCVRProtocol.h; sourceTree = "<group>"; };
|
||||
50FCEB6A18C72017004AD434 /* ButtonReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ButtonReader.cpp; sourceTree = "<group>"; };
|
||||
50FCEB6B18C72017004AD434 /* ButtonReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ButtonReader.h; sourceTree = "<group>"; };
|
||||
50FCEB6D18C72017004AD434 /* CheckBoxReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CheckBoxReader.cpp; sourceTree = "<group>"; };
|
||||
|
@ -7788,6 +7824,7 @@
|
|||
1551A340158F2AB200E66CFE /* Products */,
|
||||
500DC89819105D41007B91BF /* renderer */,
|
||||
1AAF5849180E40B8000584C8 /* storage */,
|
||||
50F9654D1CD0360000ADE813 /* vr */,
|
||||
2905F9E618CF08D000240AA3 /* ui */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
|
@ -9900,6 +9937,23 @@
|
|||
path = apple;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
50F9654D1CD0360000ADE813 /* vr */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
502AF9771D0711B8006AF256 /* CCVRGenericHeadTracker.cpp */,
|
||||
50F9654E1CD0360000ADE813 /* CCVRGenericRenderer.cpp */,
|
||||
50F9654F1CD0360000ADE813 /* CCVRGenericRenderer.h */,
|
||||
50F965501CD0360000ADE813 /* CCVRProtocol.h */,
|
||||
503D4F611CE29D4E0054A2D1 /* CCVRDistortionMesh.cpp */,
|
||||
503D4F621CE29D4E0054A2D1 /* CCVRDistortionMesh.h */,
|
||||
503D4F691CE2BDBE0054A2D1 /* CCVRDistortion.cpp */,
|
||||
503D4F6A1CE2BDBE0054A2D1 /* CCVRDistortion.h */,
|
||||
5030C03E1CE6DF8B00C5D3E7 /* CCVRGenericHeadTracker.h */,
|
||||
);
|
||||
name = vr;
|
||||
path = ../cocos/vr;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
50FCEB6818C72017004AD434 /* WidgetReader */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -11378,6 +11432,7 @@
|
|||
298C75D71C0465D1006BAE63 /* CCStencilStateManager.hpp in Headers */,
|
||||
B6DD2FDB1B04825B00E47F5F /* DetourLocalBoundary.h in Headers */,
|
||||
B6CAB3491AF9AA1A00B9B856 /* gim_clip_polygon.h in Headers */,
|
||||
503D4F661CE29D4E0054A2D1 /* CCVRDistortionMesh.h in Headers */,
|
||||
B677B0DB1B18492D006762CB /* CCNavMeshUtils.h in Headers */,
|
||||
B6CAAFE41AF9A9E100B9B856 /* CCPhysics3D.h in Headers */,
|
||||
15AE1A7F19AAD40300C27E9E /* b2DistanceJoint.h in Headers */,
|
||||
|
@ -11582,6 +11637,7 @@
|
|||
B6CAB3271AF9AA1A00B9B856 /* btGImpactBvh.h in Headers */,
|
||||
15AE198D19AAD36E00C27E9E /* CheckBoxReader.h in Headers */,
|
||||
B29A7E0919EE1B7700872B35 /* AttachmentLoader.h in Headers */,
|
||||
50F965541CD0360000ADE813 /* CCVRGenericRenderer.h in Headers */,
|
||||
1A01C68818F57BE800EFE3A6 /* CCBool.h in Headers */,
|
||||
B29A7E3319EE1B7700872B35 /* SlotData.h in Headers */,
|
||||
B665E2741AA80A6500DDB1C5 /* CCPUDoPlacementParticleEventHandler.h in Headers */,
|
||||
|
@ -11852,6 +11908,7 @@
|
|||
B6CAB3A51AF9AA1A00B9B856 /* btConeTwistConstraint.h in Headers */,
|
||||
15AE181E19AAD2F700C27E9E /* CCBundle3DData.h in Headers */,
|
||||
1A5702F8180BCE750088DEC7 /* CCTMXTiledMap.h in Headers */,
|
||||
503D4F6E1CE2BDBE0054A2D1 /* CCVRDistortion.h in Headers */,
|
||||
B665E2801AA80A6500DDB1C5 /* CCPUDoScaleEventHandlerTranslator.h in Headers */,
|
||||
5034CA21191D591100CE6051 /* ccShader_PositionTextureColorAlphaTest.frag in Headers */,
|
||||
D0FD03491A3B51AA00825BB5 /* CCAllocatorBase.h in Headers */,
|
||||
|
@ -11869,6 +11926,7 @@
|
|||
15AE191019AAD35000C27E9E /* CCInputDelegate.h in Headers */,
|
||||
B665E4301AA80A6600DDB1C5 /* CCPUVelocityMatchingAffectorTranslator.h in Headers */,
|
||||
50864CA91C7BC1B000B3BAB1 /* cpDampedRotarySpring.h in Headers */,
|
||||
5030C0421CE6DF8B00C5D3E7 /* CCVRGenericHeadTracker.h in Headers */,
|
||||
15AE184C19AAD30800C27E9E /* SimpleAudioEngine.h in Headers */,
|
||||
50ABBDA11925AB4100A911A9 /* CCGroupCommand.h in Headers */,
|
||||
50864C911C7BC1B000B3BAB1 /* chipmunk_private.h in Headers */,
|
||||
|
@ -12186,6 +12244,7 @@
|
|||
50ABBEB11925AB6F00A911A9 /* CCUserDefault.h in Headers */,
|
||||
B29A7DEF19EE1B7700872B35 /* SkeletonBounds.h in Headers */,
|
||||
D0FD034D1A3B51AA00825BB5 /* CCAllocatorDiagnostics.h in Headers */,
|
||||
50F965571CD0360000ADE813 /* CCVRProtocol.h in Headers */,
|
||||
50ABBEC71925AB6F00A911A9 /* etc1.h in Headers */,
|
||||
B6CAB27B1AF9AA1A00B9B856 /* SphereTriangleDetector.h in Headers */,
|
||||
B29A7E3519EE1B7700872B35 /* AnimationStateData.h in Headers */,
|
||||
|
@ -12337,6 +12396,7 @@
|
|||
507B3D691C31BDD30067B53E /* CCPUDoPlacementParticleEventHandler.h in Headers */,
|
||||
507B3D6A1C31BDD30067B53E /* gim_memory.h in Headers */,
|
||||
507B3D6B1C31BDD30067B53E /* btGpu3DGridBroadphaseSharedDefs.h in Headers */,
|
||||
50F965561CD0360000ADE813 /* CCVRGenericRenderer.h in Headers */,
|
||||
507B3D6C1C31BDD30067B53E /* b2Collision.h in Headers */,
|
||||
507B3D6D1C31BDD30067B53E /* CCPUOnVelocityObserver.h in Headers */,
|
||||
507B3D6E1C31BDD30067B53E /* btMultiBodyDynamicsWorld.h in Headers */,
|
||||
|
@ -12567,6 +12627,7 @@
|
|||
507B3E461C31BDD30067B53E /* Bone.h in Headers */,
|
||||
507B3E471C31BDD30067B53E /* CCPUForceFieldAffectorTranslator.h in Headers */,
|
||||
507B3E481C31BDD30067B53E /* CCBillBoard.h in Headers */,
|
||||
5030C0441CE6DF8B00C5D3E7 /* CCVRGenericHeadTracker.h in Headers */,
|
||||
507B3E491C31BDD30067B53E /* CCTrianglesCommand.h in Headers */,
|
||||
507B3E4A1C31BDD30067B53E /* CCPUDynamicAttributeTranslator.h in Headers */,
|
||||
507B3E4B1C31BDD30067B53E /* btSequentialImpulseConstraintSolver.h in Headers */,
|
||||
|
@ -13052,6 +13113,7 @@
|
|||
507B401C1C31BDD30067B53E /* CCNinePatchImageParser.h in Headers */,
|
||||
507B401D1C31BDD30067B53E /* CCController.h in Headers */,
|
||||
507B401E1C31BDD30067B53E /* btGpuDefines.h in Headers */,
|
||||
503D4F701CE2BDBE0054A2D1 /* CCVRDistortion.h in Headers */,
|
||||
507B401F1C31BDD30067B53E /* ComAudioReader.h in Headers */,
|
||||
507B40201C31BDD30067B53E /* CCGameController.h in Headers */,
|
||||
507B40211C31BDD30067B53E /* boxBoxDistance.h in Headers */,
|
||||
|
@ -13083,6 +13145,7 @@
|
|||
507B403A1C31BDD30067B53E /* CCTimeLine.h in Headers */,
|
||||
507B403B1C31BDD30067B53E /* UILayoutComponent.h in Headers */,
|
||||
507B403C1C31BDD30067B53E /* btConvexConvexAlgorithm.h in Headers */,
|
||||
50F965591CD0360000ADE813 /* CCVRProtocol.h in Headers */,
|
||||
507B403D1C31BDD30067B53E /* CCPUGravityAffectorTranslator.h in Headers */,
|
||||
507B403E1C31BDD30067B53E /* MathUtil.h in Headers */,
|
||||
507B403F1C31BDD30067B53E /* CCInteger.h in Headers */,
|
||||
|
@ -13115,6 +13178,7 @@
|
|||
507B405A1C31BDD30067B53E /* CCPUDoFreezeEventHandler.h in Headers */,
|
||||
507B405B1C31BDD30067B53E /* CCGL.h in Headers */,
|
||||
507B405C1C31BDD30067B53E /* CCArmatureAnimation.h in Headers */,
|
||||
503D4F681CE29D4E0054A2D1 /* CCVRDistortionMesh.h in Headers */,
|
||||
507B405D1C31BDD30067B53E /* b2ContactManager.h in Headers */,
|
||||
507B405E1C31BDD30067B53E /* CCVertexIndexData.h in Headers */,
|
||||
507B405F1C31BDD30067B53E /* Vec3.h in Headers */,
|
||||
|
@ -13378,6 +13442,7 @@
|
|||
B665E2751AA80A6500DDB1C5 /* CCPUDoPlacementParticleEventHandler.h in Headers */,
|
||||
B6CAB35C1AF9AA1A00B9B856 /* gim_memory.h in Headers */,
|
||||
B6CAB43A1AF9AA1A00B9B856 /* btGpu3DGridBroadphaseSharedDefs.h in Headers */,
|
||||
50F965551CD0360000ADE813 /* CCVRGenericRenderer.h in Headers */,
|
||||
15AE1A4019AAD3D500C27E9E /* b2Collision.h in Headers */,
|
||||
B665E36D1AA80A6500DDB1C5 /* CCPUOnVelocityObserver.h in Headers */,
|
||||
B6CAB4061AF9AA1A00B9B856 /* btMultiBodyDynamicsWorld.h in Headers */,
|
||||
|
@ -13608,6 +13673,7 @@
|
|||
B29A7E0E19EE1B7700872B35 /* Bone.h in Headers */,
|
||||
B665E2BD1AA80A6500DDB1C5 /* CCPUForceFieldAffectorTranslator.h in Headers */,
|
||||
B60C5BD719AC68B10056FBDE /* CCBillBoard.h in Headers */,
|
||||
5030C0431CE6DF8B00C5D3E7 /* CCVRGenericHeadTracker.h in Headers */,
|
||||
B230ED7419B417AE00364AA8 /* CCTrianglesCommand.h in Headers */,
|
||||
B665E2911AA80A6500DDB1C5 /* CCPUDynamicAttributeTranslator.h in Headers */,
|
||||
B6CAB3D01AF9AA1A00B9B856 /* btSequentialImpulseConstraintSolver.h in Headers */,
|
||||
|
@ -14094,6 +14160,7 @@
|
|||
291901441B05895600F8B4BA /* CCNinePatchImageParser.h in Headers */,
|
||||
3E6176691960F89B00DE83F5 /* CCController.h in Headers */,
|
||||
B6CAB43E1AF9AA1A00B9B856 /* btGpuDefines.h in Headers */,
|
||||
503D4F6F1CE2BDBE0054A2D1 /* CCVRDistortion.h in Headers */,
|
||||
3823841D1A2590D2002C4610 /* ComAudioReader.h in Headers */,
|
||||
3E6176781960F89B00DE83F5 /* CCGameController.h in Headers */,
|
||||
B6CAB4C81AF9AA1A00B9B856 /* boxBoxDistance.h in Headers */,
|
||||
|
@ -14125,6 +14192,7 @@
|
|||
15AE198019AAD35700C27E9E /* CCTimeLine.h in Headers */,
|
||||
38B8E2E419E671D2002D7CE7 /* UILayoutComponent.h in Headers */,
|
||||
B6CAB2481AF9AA1A00B9B856 /* btConvexConvexAlgorithm.h in Headers */,
|
||||
50F965581CD0360000ADE813 /* CCVRProtocol.h in Headers */,
|
||||
B665E2CD1AA80A6500DDB1C5 /* CCPUGravityAffectorTranslator.h in Headers */,
|
||||
50ABBD4F1925AB0000A911A9 /* MathUtil.h in Headers */,
|
||||
1A01C69718F57BE800EFE3A6 /* CCInteger.h in Headers */,
|
||||
|
@ -14157,6 +14225,7 @@
|
|||
B665E26D1AA80A6500DDB1C5 /* CCPUDoFreezeEventHandler.h in Headers */,
|
||||
50643BD519BFAECF00EF68ED /* CCGL.h in Headers */,
|
||||
15AE193919AAD35100C27E9E /* CCArmatureAnimation.h in Headers */,
|
||||
503D4F671CE29D4E0054A2D1 /* CCVRDistortionMesh.h in Headers */,
|
||||
15AE1AA419AAD40300C27E9E /* b2ContactManager.h in Headers */,
|
||||
B276EF601988D1D500CD400F /* CCVertexIndexData.h in Headers */,
|
||||
50ABBD5F1925AB0000A911A9 /* Vec3.h in Headers */,
|
||||
|
@ -14429,6 +14498,7 @@
|
|||
B6CAB2811AF9AA1A00B9B856 /* btBoxShape.cpp in Sources */,
|
||||
50ABBE311925AB6F00A911A9 /* CCConfiguration.cpp in Sources */,
|
||||
B665E3821AA80A6500DDB1C5 /* CCPUPathFollower.cpp in Sources */,
|
||||
502AF9781D0711B8006AF256 /* CCVRGenericHeadTracker.cpp in Sources */,
|
||||
1A01C6A418F58F7500EFE3A6 /* CCNotificationCenter.cpp in Sources */,
|
||||
15AE1A5D19AAD40300C27E9E /* b2Body.cpp in Sources */,
|
||||
15AE1BDA19AAE01E00C27E9E /* CCControlSwitch.cpp in Sources */,
|
||||
|
@ -14562,6 +14632,7 @@
|
|||
382383F81A258FA7002C4610 /* idl_gen_general.cpp in Sources */,
|
||||
15AE1C1319AAE2C600C27E9E /* CCPhysicsSprite.cpp in Sources */,
|
||||
382384131A259092002C4610 /* NodeReaderProtocol.cpp in Sources */,
|
||||
503D4F6B1CE2BDBE0054A2D1 /* CCVRDistortion.cpp in Sources */,
|
||||
B665E2C21AA80A6500DDB1C5 /* CCPUGeometryRotatorTranslator.cpp in Sources */,
|
||||
15AE1A5F19AAD40300C27E9E /* b2ContactManager.cpp in Sources */,
|
||||
B6CAB2451AF9AA1A00B9B856 /* btConvexConvexAlgorithm.cpp in Sources */,
|
||||
|
@ -14837,6 +14908,7 @@
|
|||
1A570286180BCC900088DEC7 /* CCSpriteFrame.cpp in Sources */,
|
||||
B24AA989195A675C007B4522 /* CCFastTMXTiledMap.cpp in Sources */,
|
||||
B6CAB4DF1AF9AA1A00B9B856 /* SpuSampleTask.cpp in Sources */,
|
||||
50F965511CD0360000ADE813 /* CCVRGenericRenderer.cpp in Sources */,
|
||||
B29A7E2F19EE1B7700872B35 /* SkeletonAnimation.cpp in Sources */,
|
||||
B60C5BD419AC68B10056FBDE /* CCBillBoard.cpp in Sources */,
|
||||
15AE199619AAD39600C27E9E /* ListViewReader.cpp in Sources */,
|
||||
|
@ -15107,6 +15179,7 @@
|
|||
B68778F81A8CA82E00643ABF /* CCParticle3DAffector.cpp in Sources */,
|
||||
15AE19A019AAD39600C27E9E /* TextAtlasReader.cpp in Sources */,
|
||||
15AE1A2A19AAD3D500C27E9E /* b2Distance.cpp in Sources */,
|
||||
503D4F631CE29D4E0054A2D1 /* CCVRDistortionMesh.cpp in Sources */,
|
||||
50ABBE6D1925AB6F00A911A9 /* CCEventListenerKeyboard.cpp in Sources */,
|
||||
15FB20871AE7C57D00C31518 /* shapes.cc in Sources */,
|
||||
B665E27A1AA80A6500DDB1C5 /* CCPUDoScaleEventHandler.cpp in Sources */,
|
||||
|
@ -15276,6 +15349,7 @@
|
|||
507B39D01C31BDD30067B53E /* CCSet.cpp in Sources */,
|
||||
507B39D11C31BDD30067B53E /* CCString.cpp in Sources */,
|
||||
507B39D21C31BDD30067B53E /* sweep.cc in Sources */,
|
||||
502AF97A1D0711CA006AF256 /* CCVRGenericHeadTracker.cpp in Sources */,
|
||||
507B39D31C31BDD30067B53E /* ImageViewReader.cpp in Sources */,
|
||||
507B39D41C31BDD30067B53E /* btGeneric6DofSpringConstraint.cpp in Sources */,
|
||||
507B39D51C31BDD30067B53E /* CCPUAffectorManager.cpp in Sources */,
|
||||
|
@ -15409,6 +15483,7 @@
|
|||
507B3A551C31BDD30067B53E /* CCArmatureDefine.cpp in Sources */,
|
||||
507B3A561C31BDD30067B53E /* CCPUOnRandomObserverTranslator.cpp in Sources */,
|
||||
507B3A571C31BDD30067B53E /* CCMeshCommand.cpp in Sources */,
|
||||
503D4F6D1CE2BDBE0054A2D1 /* CCVRDistortion.cpp in Sources */,
|
||||
507B3A581C31BDD30067B53E /* CCStencilStateManager.cpp in Sources */,
|
||||
507B3A591C31BDD30067B53E /* CCComRender.cpp in Sources */,
|
||||
507B3A5A1C31BDD30067B53E /* SpriteReader.cpp in Sources */,
|
||||
|
@ -15684,6 +15759,7 @@
|
|||
507B3B681C31BDD30067B53E /* btGpu3DGridBroadphase.cpp in Sources */,
|
||||
507B3B691C31BDD30067B53E /* CCDecorativeDisplay.cpp in Sources */,
|
||||
507B3B6A1C31BDD30067B53E /* TextReader.cpp in Sources */,
|
||||
50F965531CD0360000ADE813 /* CCVRGenericRenderer.cpp in Sources */,
|
||||
507B3B6B1C31BDD30067B53E /* Mat4.cpp in Sources */,
|
||||
507B3B6C1C31BDD30067B53E /* CCClippingNode.cpp in Sources */,
|
||||
507B3B6D1C31BDD30067B53E /* UIButton.cpp in Sources */,
|
||||
|
@ -15953,6 +16029,7 @@
|
|||
507B3C741C31BDD30067B53E /* CCPUPlaneColliderTranslator.cpp in Sources */,
|
||||
507B3C751C31BDD30067B53E /* idl_gen_fbs.cpp in Sources */,
|
||||
507B3C761C31BDD30067B53E /* UIPageViewIndicator.cpp in Sources */,
|
||||
503D4F651CE29D4E0054A2D1 /* CCVRDistortionMesh.cpp in Sources */,
|
||||
507B3C771C31BDD30067B53E /* CCPUColorAffector.cpp in Sources */,
|
||||
507B3C781C31BDD30067B53E /* CCPUBaseForceAffector.cpp in Sources */,
|
||||
507B3C791C31BDD30067B53E /* UILoadingBar.cpp in Sources */,
|
||||
|
@ -16122,6 +16199,7 @@
|
|||
1A01C69918F57BE800EFE3A6 /* CCSet.cpp in Sources */,
|
||||
1A01C69D18F57BE800EFE3A6 /* CCString.cpp in Sources */,
|
||||
15FB20981AE7C57D00C31518 /* sweep.cc in Sources */,
|
||||
502AF9791D0711C9006AF256 /* CCVRGenericHeadTracker.cpp in Sources */,
|
||||
15AE199219AAD37300C27E9E /* ImageViewReader.cpp in Sources */,
|
||||
B6CAB3BC1AF9AA1A00B9B856 /* btGeneric6DofSpringConstraint.cpp in Sources */,
|
||||
B665E1F71AA80A6500DDB1C5 /* CCPUAffectorManager.cpp in Sources */,
|
||||
|
@ -16255,6 +16333,7 @@
|
|||
15AE193C19AAD35100C27E9E /* CCArmatureDefine.cpp in Sources */,
|
||||
B665E35F1AA80A6500DDB1C5 /* CCPUOnRandomObserverTranslator.cpp in Sources */,
|
||||
B29594B51926D5EC003EEF37 /* CCMeshCommand.cpp in Sources */,
|
||||
503D4F6C1CE2BDBE0054A2D1 /* CCVRDistortion.cpp in Sources */,
|
||||
298C75D61C0465D1006BAE63 /* CCStencilStateManager.cpp in Sources */,
|
||||
15AE194B19AAD35100C27E9E /* CCComRender.cpp in Sources */,
|
||||
382384451A25915C002C4610 /* SpriteReader.cpp in Sources */,
|
||||
|
@ -16530,6 +16609,7 @@
|
|||
B6CAB4341AF9AA1A00B9B856 /* btGpu3DGridBroadphase.cpp in Sources */,
|
||||
15AE195119AAD35100C27E9E /* CCDecorativeDisplay.cpp in Sources */,
|
||||
15AE19BA19AAD39700C27E9E /* TextReader.cpp in Sources */,
|
||||
50F965521CD0360000ADE813 /* CCVRGenericRenderer.cpp in Sources */,
|
||||
50ABBD491925AB0000A911A9 /* Mat4.cpp in Sources */,
|
||||
1A570203180BCBD40088DEC7 /* CCClippingNode.cpp in Sources */,
|
||||
15AE1B8619AADA9A00C27E9E /* UIButton.cpp in Sources */,
|
||||
|
@ -16800,6 +16880,7 @@
|
|||
B665E3931AA80A6500DDB1C5 /* CCPUPlaneColliderTranslator.cpp in Sources */,
|
||||
382383F71A258FA7002C4610 /* idl_gen_fbs.cpp in Sources */,
|
||||
B5A738971BB0051F00BAAEF8 /* UIPageViewIndicator.cpp in Sources */,
|
||||
503D4F641CE29D4E0054A2D1 /* CCVRDistortionMesh.cpp in Sources */,
|
||||
B665E24B1AA80A6500DDB1C5 /* CCPUColorAffector.cpp in Sources */,
|
||||
B665E20F1AA80A6500DDB1C5 /* CCPUBaseForceAffector.cpp in Sources */,
|
||||
15AE1B7419AADA9A00C27E9E /* UILoadingBar.cpp in Sources */,
|
||||
|
|
|
@ -41,16 +41,7 @@ NS_CC_BEGIN
|
|||
Camera* Camera::_visitingCamera = nullptr;
|
||||
experimental::Viewport Camera::_defaultViewport;
|
||||
|
||||
Camera* Camera::getDefaultCamera()
|
||||
{
|
||||
auto scene = Director::getInstance()->getRunningScene();
|
||||
if(scene)
|
||||
{
|
||||
return scene->getDefaultCamera();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
// start static methods
|
||||
|
||||
Camera* Camera::create()
|
||||
{
|
||||
|
@ -88,6 +79,33 @@ Camera* Camera::createOrthographic(float zoomX, float zoomY, float nearPlane, fl
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
Camera* Camera::getDefaultCamera()
|
||||
{
|
||||
auto scene = Director::getInstance()->getRunningScene();
|
||||
if(scene)
|
||||
{
|
||||
return scene->getDefaultCamera();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const experimental::Viewport& Camera::getDefaultViewport()
|
||||
{
|
||||
return _defaultViewport;
|
||||
}
|
||||
void Camera::setDefaultViewport(const experimental::Viewport& vp)
|
||||
{
|
||||
_defaultViewport = vp;
|
||||
}
|
||||
|
||||
const Camera* Camera::getVisitingCamera()
|
||||
{
|
||||
return _visitingCamera;
|
||||
}
|
||||
|
||||
// end static methods
|
||||
|
||||
Camera::Camera()
|
||||
: _scene(nullptr)
|
||||
, _viewProjectionDirty(true)
|
||||
|
@ -421,11 +439,19 @@ void Camera::setFrameBufferObject(experimental::FrameBuffer *fbo)
|
|||
}
|
||||
}
|
||||
|
||||
void Camera::apply()
|
||||
{
|
||||
applyFrameBufferObject();
|
||||
applyViewport();
|
||||
}
|
||||
|
||||
void Camera::applyFrameBufferObject()
|
||||
{
|
||||
if(nullptr == _fbo)
|
||||
{
|
||||
experimental::FrameBuffer::applyDefaultFBO();
|
||||
// inherit from context if it doesn't have a FBO
|
||||
// don't call apply the default one
|
||||
// experimental::FrameBuffer::applyDefaultFBO();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -433,14 +459,10 @@ void Camera::applyFrameBufferObject()
|
|||
}
|
||||
}
|
||||
|
||||
void Camera::apply()
|
||||
{
|
||||
applyFrameBufferObject();
|
||||
applyViewport();
|
||||
}
|
||||
|
||||
void Camera::applyViewport()
|
||||
{
|
||||
glGetIntegerv(GL_VIEWPORT, _oldViewport);
|
||||
|
||||
if(nullptr == _fbo)
|
||||
{
|
||||
glViewport(getDefaultViewport()._left, getDefaultViewport()._bottom, getDefaultViewport()._width, getDefaultViewport()._height);
|
||||
|
@ -450,7 +472,36 @@ void Camera::applyViewport()
|
|||
glViewport(_viewport._left * _fbo->getWidth(), _viewport._bottom * _fbo->getHeight(),
|
||||
_viewport._width * _fbo->getWidth(), _viewport._height * _fbo->getHeight());
|
||||
}
|
||||
}
|
||||
|
||||
void Camera::setViewport(const experimental::Viewport& vp)
|
||||
{
|
||||
_viewport = vp;
|
||||
}
|
||||
|
||||
void Camera::restore()
|
||||
{
|
||||
restoreFrameBufferObject();
|
||||
restoreViewport();
|
||||
}
|
||||
|
||||
void Camera::restoreFrameBufferObject()
|
||||
{
|
||||
if(nullptr == _fbo)
|
||||
{
|
||||
// it was inherited from context if it doesn't have a FBO
|
||||
// don't call restore the default one... just keep using the previous one
|
||||
// experimental::FrameBuffer::applyDefaultFBO();
|
||||
}
|
||||
else
|
||||
{
|
||||
_fbo->restoreFBO();
|
||||
}
|
||||
}
|
||||
|
||||
void Camera::restoreViewport()
|
||||
{
|
||||
glViewport(_oldViewport[0], _oldViewport[1], _oldViewport[2], _oldViewport[3]);
|
||||
}
|
||||
|
||||
int Camera::getRenderOrder() const
|
||||
|
|
|
@ -99,6 +99,19 @@ public:
|
|||
/** create default camera, the camera type depends on Director::getProjection, the depth of the default camera is 0 */
|
||||
static Camera* create();
|
||||
|
||||
/**
|
||||
* Get the visiting camera , the visiting camera shall be set on Scene::render
|
||||
*/
|
||||
static const Camera* getVisitingCamera();
|
||||
|
||||
static const experimental::Viewport& getDefaultViewport();
|
||||
static void setDefaultViewport(const experimental::Viewport& vp);
|
||||
|
||||
/**
|
||||
* Get the default camera of the current running scene.
|
||||
*/
|
||||
static Camera* getDefaultCamera();
|
||||
|
||||
/**
|
||||
* Gets the type of camera.
|
||||
*
|
||||
|
@ -227,15 +240,6 @@ public:
|
|||
virtual void onEnter() override;
|
||||
virtual void onExit() override;
|
||||
|
||||
/**
|
||||
* Get the visiting camera , the visiting camera shall be set on Scene::render
|
||||
*/
|
||||
static const Camera* getVisitingCamera() { return _visitingCamera; }
|
||||
|
||||
/**
|
||||
* Get the default camera of the current running scene.
|
||||
*/
|
||||
static Camera* getDefaultCamera();
|
||||
/**
|
||||
Before rendering scene with this camera, the background need to be cleared. It clears the depth buffer with max depth by default. Use setBackgroundBrush to modify the default behavior
|
||||
*/
|
||||
|
@ -244,14 +248,19 @@ public:
|
|||
Apply the FBO, RenderTargets and viewport.
|
||||
*/
|
||||
void apply();
|
||||
/**
|
||||
Restor the FBO, RenderTargets and viewport.
|
||||
*/
|
||||
void restore();
|
||||
|
||||
/**
|
||||
Set FBO, which will attach several render target for the rendered result.
|
||||
*/
|
||||
*/
|
||||
void setFrameBufferObject(experimental::FrameBuffer* fbo);
|
||||
/**
|
||||
Set Viewport for camera.
|
||||
*/
|
||||
void setViewport(const experimental::Viewport& vp) { _viewport = vp; }
|
||||
void setViewport(const experimental::Viewport& vp);
|
||||
|
||||
/**
|
||||
* Whether or not the viewprojection matrix was updated since the last frame.
|
||||
|
@ -292,13 +301,19 @@ CC_CONSTRUCTOR_ACCESS:
|
|||
bool initOrthographic(float zoomX, float zoomY, float nearPlane, float farPlane);
|
||||
void applyFrameBufferObject();
|
||||
void applyViewport();
|
||||
void restoreFrameBufferObject();
|
||||
void restoreViewport();
|
||||
|
||||
protected:
|
||||
static Camera* _visitingCamera;
|
||||
static experimental::Viewport _defaultViewport;
|
||||
|
||||
Scene* _scene; //Scene camera belongs to
|
||||
Mat4 _projection;
|
||||
mutable Mat4 _view;
|
||||
mutable Mat4 _viewInv;
|
||||
mutable Mat4 _viewProjection;
|
||||
|
||||
Vec3 _up;
|
||||
Camera::Type _type;
|
||||
float _fieldOfView;
|
||||
|
@ -312,18 +327,12 @@ protected:
|
|||
mutable Frustum _frustum; // camera frustum
|
||||
mutable bool _frustumDirty;
|
||||
int8_t _depth; //camera depth, the depth of camera with CameraFlag::DEFAULT flag is 0 by default, a camera with larger depth is drawn on top of camera with smaller depth
|
||||
static Camera* _visitingCamera;
|
||||
|
||||
CameraBackgroundBrush* _clearBrush; //brush used to clear the back ground
|
||||
|
||||
experimental::Viewport _viewport;
|
||||
|
||||
experimental::FrameBuffer* _fbo;
|
||||
protected:
|
||||
static experimental::Viewport _defaultViewport;
|
||||
public:
|
||||
static const experimental::Viewport& getDefaultViewport() { return _defaultViewport; }
|
||||
static void setDefaultViewport(const experimental::Viewport& vp) { _defaultViewport = vp; }
|
||||
GLint _oldViewport[4];
|
||||
};
|
||||
|
||||
NS_CC_END
|
||||
|
|
|
@ -1788,6 +1788,7 @@ void Node::setAdditionalTransform(Mat4* additionalTransform)
|
|||
if (additionalTransform == nullptr)
|
||||
{
|
||||
_useAdditionalTransform = false;
|
||||
_additionalTransform = Mat4::IDENTITY;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1797,6 +1798,12 @@ void Node::setAdditionalTransform(Mat4* additionalTransform)
|
|||
_transformUpdated = _transformDirty = _inverseDirty = true;
|
||||
}
|
||||
|
||||
void Node::setAdditionalTransform(const Mat4& additionalTransform)
|
||||
{
|
||||
_useAdditionalTransform = true;
|
||||
_additionalTransform = additionalTransform;
|
||||
_transformUpdated = _transformDirty = _inverseDirty = true;
|
||||
}
|
||||
|
||||
AffineTransform Node::getParentToNodeAffineTransform() const
|
||||
{
|
||||
|
|
|
@ -1644,6 +1644,7 @@ public:
|
|||
* @param additionalTransform An additional transform matrix.
|
||||
*/
|
||||
void setAdditionalTransform(Mat4* additionalTransform);
|
||||
void setAdditionalTransform(const Mat4& additionalTransform);
|
||||
void setAdditionalTransform(const AffineTransform& additionalTransform);
|
||||
|
||||
/// @} end of Coordinate Converters
|
||||
|
|
|
@ -184,7 +184,7 @@ const std::vector<Camera*>& Scene::getCameras()
|
|||
return _cameras;
|
||||
}
|
||||
|
||||
void Scene::render(Renderer* renderer)
|
||||
void Scene::render(Renderer* renderer, const Mat4& eyeTransform, const Mat4* eyeProjection)
|
||||
{
|
||||
auto director = Director::getInstance();
|
||||
Camera* defaultCamera = nullptr;
|
||||
|
@ -201,6 +201,18 @@ void Scene::render(Renderer* renderer)
|
|||
defaultCamera = Camera::_visitingCamera;
|
||||
}
|
||||
|
||||
// There are two ways to modify the "default camera" with the eye Transform:
|
||||
// a) modify the "nodeToParentTransform" matrix
|
||||
// b) modify the "additional transform" matrix
|
||||
// both alternatives are correct, if the user manually modifies the camera with a camera->setPosition()
|
||||
// then the "nodeToParent transform" will be lost.
|
||||
// And it is important that the change is "permament", because the matrix might be used for calculate
|
||||
// culling and other stuff.
|
||||
if (eyeProjection)
|
||||
camera->setAdditionalProjection(*eyeProjection * camera->getProjectionMatrix().getInversed());
|
||||
else
|
||||
camera->setAdditionalTransform(eyeTransform.getInversed());
|
||||
|
||||
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, Camera::_visitingCamera->getViewProjectionMatrix());
|
||||
camera->apply();
|
||||
|
@ -216,8 +228,13 @@ void Scene::render(Renderer* renderer)
|
|||
#endif
|
||||
|
||||
renderer->render();
|
||||
camera->restore();
|
||||
|
||||
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
|
||||
// we shouldn't restore the transform matrix since it could be used
|
||||
// from "update" or other parts of the game to calculate culling or something else.
|
||||
// camera->setNodeToParentTransform(eyeCopy);
|
||||
}
|
||||
|
||||
#if CC_USE_3D_PHYSICS && CC_ENABLE_BULLET_INTEGRATION
|
||||
|
@ -232,7 +249,7 @@ void Scene::render(Renderer* renderer)
|
|||
#endif
|
||||
|
||||
Camera::_visitingCamera = nullptr;
|
||||
experimental::FrameBuffer::applyDefaultFBO();
|
||||
// experimental::FrameBuffer::applyDefaultFBO();
|
||||
}
|
||||
|
||||
void Scene::removeAllChildren()
|
||||
|
|
|
@ -109,7 +109,7 @@ public:
|
|||
* @param renderer The renderer use to render the scene.
|
||||
* @js NA
|
||||
*/
|
||||
virtual void render(Renderer* renderer);
|
||||
virtual void render(Renderer* renderer, const Mat4& eyeTransform, const Mat4* eyeProjection = nullptr);
|
||||
|
||||
/** override function */
|
||||
virtual void removeAllChildren() override;
|
||||
|
|
|
@ -463,7 +463,7 @@ void Sprite::setVertexRect(const Rect& rect)
|
|||
_rect = rect;
|
||||
}
|
||||
|
||||
void Sprite::setTextureCoords(Rect rect)
|
||||
void Sprite::setTextureCoords(const Rect& rectInPoint)
|
||||
{
|
||||
Texture2D *tex = _batchNode ? _textureAtlas->getTexture() : _texture;
|
||||
if (tex == nullptr)
|
||||
|
@ -471,7 +471,7 @@ void Sprite::setTextureCoords(Rect rect)
|
|||
return;
|
||||
}
|
||||
|
||||
rect = CC_RECT_POINTS_TO_PIXELS(rect);
|
||||
auto rectInPixels = CC_RECT_POINTS_TO_PIXELS(rectInPoint);
|
||||
|
||||
float atlasWidth = (float)tex->getPixelsWide();
|
||||
float atlasHeight = (float)tex->getPixelsHigh();
|
||||
|
@ -481,15 +481,15 @@ void Sprite::setTextureCoords(Rect rect)
|
|||
if (_rectRotated)
|
||||
{
|
||||
#if CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
|
||||
left = (2*rect.origin.x+1)/(2*atlasWidth);
|
||||
right = left+(rect.size.height*2-2)/(2*atlasWidth);
|
||||
top = (2*rect.origin.y+1)/(2*atlasHeight);
|
||||
bottom = top+(rect.size.width*2-2)/(2*atlasHeight);
|
||||
left = (2*rectInPixels.origin.x+1)/(2*atlasWidth);
|
||||
right = left+(rectInPixels.size.height*2-2)/(2*atlasWidth);
|
||||
top = (2*rectInPixels.origin.y+1)/(2*atlasHeight);
|
||||
bottom = top+(rectInPixels.size.width*2-2)/(2*atlasHeight);
|
||||
#else
|
||||
left = rect.origin.x/atlasWidth;
|
||||
right = (rect.origin.x+rect.size.height) / atlasWidth;
|
||||
top = rect.origin.y/atlasHeight;
|
||||
bottom = (rect.origin.y+rect.size.width) / atlasHeight;
|
||||
left = rectInPixels.origin.x/atlasWidth;
|
||||
right = (rectInPixels.origin.x+rectInPixels.size.height) / atlasWidth;
|
||||
top = rectInPixels.origin.y/atlasHeight;
|
||||
bottom = (rectInPixels.origin.y+rectInPixels.size.width) / atlasHeight;
|
||||
#endif // CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
|
||||
|
||||
if (_flippedX)
|
||||
|
@ -514,15 +514,15 @@ void Sprite::setTextureCoords(Rect rect)
|
|||
else
|
||||
{
|
||||
#if CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
|
||||
left = (2*rect.origin.x+1)/(2*atlasWidth);
|
||||
right = left + (rect.size.width*2-2)/(2*atlasWidth);
|
||||
top = (2*rect.origin.y+1)/(2*atlasHeight);
|
||||
bottom = top + (rect.size.height*2-2)/(2*atlasHeight);
|
||||
left = (2*rectInPixels.origin.x+1)/(2*atlasWidth);
|
||||
right = left + (rectInPixels.size.width*2-2)/(2*atlasWidth);
|
||||
top = (2*rectInPixels.origin.y+1)/(2*atlasHeight);
|
||||
bottom = top + (rectInPixels.size.height*2-2)/(2*atlasHeight);
|
||||
#else
|
||||
left = rect.origin.x/atlasWidth;
|
||||
right = (rect.origin.x + rect.size.width) / atlasWidth;
|
||||
top = rect.origin.y/atlasHeight;
|
||||
bottom = (rect.origin.y + rect.size.height) / atlasHeight;
|
||||
left = rectInPixels.origin.x/atlasWidth;
|
||||
right = (rectInPixels.origin.x + rectInPixels.size.width) / atlasWidth;
|
||||
top = rectInPixels.origin.y/atlasHeight;
|
||||
bottom = (rectInPixels.origin.y + rectInPixels.size.height) / atlasHeight;
|
||||
#endif // ! CC_FIX_ARTIFACTS_BY_STRECHING_TEXEL
|
||||
|
||||
if(_flippedX)
|
||||
|
|
|
@ -585,7 +585,7 @@ CC_CONSTRUCTOR_ACCESS :
|
|||
protected:
|
||||
|
||||
void updateColor() override;
|
||||
virtual void setTextureCoords(Rect rect);
|
||||
virtual void setTextureCoords(const Rect& rect);
|
||||
virtual void updateBlendFunc();
|
||||
virtual void setReorderChildDirtyRecursively();
|
||||
virtual void setDirtyRecursively(bool value);
|
||||
|
|
|
@ -670,6 +670,10 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.*
|
|||
<ClCompile Include="..\ui\UIVBox.cpp" />
|
||||
<ClCompile Include="..\ui\UIWebView.cpp" />
|
||||
<ClCompile Include="..\ui\UIWidget.cpp" />
|
||||
<ClCompile Include="..\vr\CCVRDistortion.cpp" />
|
||||
<ClCompile Include="..\vr\CCVRDistortionMesh.cpp" />
|
||||
<ClCompile Include="..\vr\CCVRGenericHeadTracker.cpp" />
|
||||
<ClCompile Include="..\vr\CCVRGenericRenderer.cpp" />
|
||||
<ClCompile Include="CCAction.cpp" />
|
||||
<ClCompile Include="CCActionCamera.cpp" />
|
||||
<ClCompile Include="CCActionCatmullRom.cpp" />
|
||||
|
@ -1295,6 +1299,11 @@ xcopy /Y /Q "$(ProjectDir)..\..\external\chipmunk\prebuilt\win32\release-lib\*.*
|
|||
<ClInclude Include="..\ui\UIWebView-inl.h" />
|
||||
<ClInclude Include="..\ui\UIWebView.h" />
|
||||
<ClInclude Include="..\ui\UIWidget.h" />
|
||||
<ClInclude Include="..\vr\CCVRDistortion.h" />
|
||||
<ClInclude Include="..\vr\CCVRDistortionMesh.h" />
|
||||
<ClInclude Include="..\vr\CCVRGenericHeadTracker.h" />
|
||||
<ClInclude Include="..\vr\CCVRGenericRenderer.h" />
|
||||
<ClInclude Include="..\vr\CCVRProtocol.h" />
|
||||
<ClInclude Include="CCAction.h" />
|
||||
<ClInclude Include="CCActionCamera.h" />
|
||||
<ClInclude Include="CCActionCatmullRom.h" />
|
||||
|
|
|
@ -286,6 +286,9 @@
|
|||
<Filter Include="cocostudio\reader\WidgetReader\TabControlReader">
|
||||
<UniqueIdentifier>{8686c220-18af-4bea-abce-f4797afd01f1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="vr">
|
||||
<UniqueIdentifier>{5cbd879f-02ae-4f28-af33-2c4f980dd6f0}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\physics\CCPhysicsBody.cpp">
|
||||
|
@ -1953,6 +1956,18 @@
|
|||
<ClCompile Include="..\editor-support\cocostudio\LocalizationManager.cpp">
|
||||
<Filter>cocostudio\json</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vr\CCVRDistortion.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vr\CCVRDistortionMesh.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vr\CCVRGenericHeadTracker.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\vr\CCVRGenericRenderer.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\physics\CCPhysicsBody.h">
|
||||
|
@ -3815,6 +3830,21 @@
|
|||
<ClInclude Include="..\editor-support\cocostudio\LocalizationManager.h">
|
||||
<Filter>cocostudio\json</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vr\CCVRProtocol.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vr\CCVRDistortion.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vr\CCVRDistortionMesh.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vr\CCVRGenericHeadTracker.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\vr\CCVRGenericRenderer.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\math\Mat4.inl">
|
||||
|
|
|
@ -572,6 +572,10 @@
|
|||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\ui\UITextField.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\ui\UIVBox.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\ui\UIWidget.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRDistortion.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRDistortionMesh.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRGenericHeadTracker.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRGenericRenderer.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCAction.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCActionCamera.h" />
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\CCActionCatmullRom.h" />
|
||||
|
@ -1175,6 +1179,10 @@
|
|||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\ui\UITextField.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\ui\UIVBox.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\ui\UIWidget.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRDistortion.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRDistortionMesh.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRGenericHeadTracker.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRGenericRenderer.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCAction.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCActionCamera.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\CCActionCatmullRom.cpp" />
|
||||
|
|
|
@ -1886,6 +1886,18 @@
|
|||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\editor-support\cocostudio\LocalizationManager.h">
|
||||
<Filter>cocostudio\components</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRDistortion.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRDistortionMesh.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRGenericHeadTracker.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRGenericRenderer.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\cocos2d.cpp">
|
||||
|
@ -3608,6 +3620,18 @@
|
|||
<Filter>cocostudio\components</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\ui\UIEditBox\UIEditBoxImpl-common.cpp" />
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRDistortion.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRDistortionMesh.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRGenericHeadTracker.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\..\..\vr\CCVRGenericRenderer.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="2d">
|
||||
|
@ -3889,6 +3913,9 @@
|
|||
<Filter Include="cocostudio\reader\WidgetReader\TabControlReader">
|
||||
<UniqueIdentifier>{fe153deb-3cee-416d-bdcb-fa409ae48240}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="vr">
|
||||
<UniqueIdentifier>{485c9ff1-3f65-46dc-a4ee-4eeb3f6d31f1}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="$(MSBuildThisFileDirectory)..\..\..\cocos2d.def" />
|
||||
|
|
|
@ -671,6 +671,10 @@
|
|||
<ClCompile Include="..\..\ui\UITextField.cpp" />
|
||||
<ClCompile Include="..\..\ui\UIVBox.cpp" />
|
||||
<ClCompile Include="..\..\ui\UIWidget.cpp" />
|
||||
<ClCompile Include="..\..\vr\CCVRDistortion.cpp" />
|
||||
<ClCompile Include="..\..\vr\CCVRDistortionMesh.cpp" />
|
||||
<ClCompile Include="..\..\vr\CCVRGenericHeadTracker.cpp" />
|
||||
<ClCompile Include="..\..\vr\CCVRGenericRenderer.cpp" />
|
||||
<ClCompile Include="..\CCAction.cpp" />
|
||||
<ClCompile Include="..\CCActionCamera.cpp" />
|
||||
<ClCompile Include="..\CCActionCatmullRom.cpp" />
|
||||
|
@ -1250,6 +1254,10 @@
|
|||
<ClInclude Include="..\..\renderer\CCTextureCube.h" />
|
||||
<ClInclude Include="..\..\ui\UIEditBox\UIEditBoxImpl-common.h" />
|
||||
<ClInclude Include="..\..\ui\UITabControl.h" />
|
||||
<ClInclude Include="..\..\vr\CCVRDistortion.h" />
|
||||
<ClInclude Include="..\..\vr\CCVRDistortionMesh.h" />
|
||||
<ClInclude Include="..\..\vr\CCVRGenericHeadTracker.h" />
|
||||
<ClInclude Include="..\..\vr\CCVRGenericRenderer.h" />
|
||||
<ClInclude Include="..\CCAutoPolygon.h" />
|
||||
<ClInclude Include="..\CCCameraBackgroundBrush.h" />
|
||||
<ClInclude Include="..\renderer\CCFrameBuffer.h" />
|
||||
|
|
|
@ -269,6 +269,9 @@
|
|||
<Filter Include="cocostudio\reader\WidgetReader\Particle3DReader\ParticleReader">
|
||||
<UniqueIdentifier>{2e9af99e-c268-459a-9615-9f3c5b58efdc}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="vr">
|
||||
<UniqueIdentifier>{757d4df8-a9d6-430f-9a7a-80170d9ca6fb}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\cocos2d.cpp" />
|
||||
|
@ -1993,6 +1996,18 @@
|
|||
<ClCompile Include="..\..\ui\UIEditBox\UIEditBoxImpl-common.cpp">
|
||||
<Filter>ui\UIWidgets\EditBox</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\vr\CCVRDistortion.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\vr\CCVRDistortionMesh.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\vr\CCVRGenericHeadTracker.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\vr\CCVRGenericRenderer.cpp">
|
||||
<Filter>vr</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\cocos2d.h" />
|
||||
|
@ -3890,6 +3905,18 @@
|
|||
<ClInclude Include="..\..\ui\UIEditBox\UIEditBoxImpl-common.h">
|
||||
<Filter>ui\UIWidgets\EditBox</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\vr\CCVRDistortion.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\vr\CCVRDistortionMesh.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\vr\CCVRGenericHeadTracker.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\vr\CCVRGenericRenderer.h">
|
||||
<Filter>vr</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\base\CCController-iOS.mm">
|
||||
|
|
|
@ -190,6 +190,10 @@ renderer/CCVertexIndexData.cpp \
|
|||
renderer/ccGLStateCache.cpp \
|
||||
renderer/CCFrameBuffer.cpp \
|
||||
renderer/ccShaders.cpp \
|
||||
vr/CCVRDistortion.cpp \
|
||||
vr/CCVRDistortionMesh.cpp \
|
||||
vr/CCVRGenericRenderer.cpp \
|
||||
vr/CCVRGenericHeadTracker.cpp \
|
||||
deprecated/CCArray.cpp \
|
||||
deprecated/CCDeprecated.cpp \
|
||||
deprecated/CCDictionary.cpp \
|
||||
|
|
|
@ -40,6 +40,7 @@ include(physics3d/CMakeLists.txt)
|
|||
include(math/CMakeLists.txt)
|
||||
include(navmesh/CMakeLists.txt)
|
||||
include(renderer/CMakeLists.txt)
|
||||
include(vr/CMakeLists.txt)
|
||||
include(base/CMakeLists.txt)
|
||||
include(deprecated/CMakeLists.txt)
|
||||
include(ui/CMakeLists.txt)
|
||||
|
@ -73,6 +74,7 @@ set(COCOS_SRC cocos2d.cpp
|
|||
${COCOS_MATH_SRC}
|
||||
${COCOS_NAVMESH_SRC}
|
||||
${COCOS_RENDERER_SRC}
|
||||
${COCOS_VR_SRC}
|
||||
${COCOS_BASE_SRC}
|
||||
${COCOS_AUDIO_SRC}
|
||||
${COCOS_UI_SRC}
|
||||
|
|
|
@ -298,7 +298,7 @@ void Director::drawScene()
|
|||
_renderer->clearDrawStats();
|
||||
|
||||
//render the scene
|
||||
_runningScene->render(_renderer);
|
||||
_openGLView->renderScene(_runningScene, _renderer);
|
||||
|
||||
_eventDispatcher->dispatchEvent(_eventAfterVisit);
|
||||
}
|
||||
|
@ -604,11 +604,9 @@ void Director::setProjection(Projection projection)
|
|||
{
|
||||
case Projection::_2D:
|
||||
{
|
||||
loadIdentityMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
|
||||
Mat4 orthoMatrix;
|
||||
Mat4::createOrthographicOffCenter(0, size.width, 0, size.height, -1024, 1024, &orthoMatrix);
|
||||
multiplyMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, orthoMatrix);
|
||||
loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, orthoMatrix);
|
||||
loadIdentityMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
break;
|
||||
}
|
||||
|
@ -619,17 +617,14 @@ void Director::setProjection(Projection projection)
|
|||
|
||||
Mat4 matrixPerspective, matrixLookup;
|
||||
|
||||
loadIdentityMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION);
|
||||
|
||||
// issue #1334
|
||||
Mat4::createPerspective(60, (GLfloat)size.width/size.height, 10, zeye+size.height/2, &matrixPerspective);
|
||||
|
||||
multiplyMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, matrixPerspective);
|
||||
|
||||
Vec3 eye(size.width/2, size.height/2, zeye), center(size.width/2, size.height/2, 0.0f), up(0.0f, 1.0f, 0.0f);
|
||||
Mat4::createLookAt(eye, center, up, &matrixLookup);
|
||||
multiplyMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, matrixLookup);
|
||||
Mat4 proj3d = matrixPerspective * matrixLookup;
|
||||
|
||||
loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_PROJECTION, proj3d);
|
||||
loadIdentityMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -845,11 +845,8 @@ void EventDispatcher::dispatchTouchEventToListeners(EventListenerVector* listene
|
|||
// second, for all camera call all listeners
|
||||
// get a copy of cameras, prevent it's been modified in listener callback
|
||||
// if camera's depth is greater, process it earlier
|
||||
auto cameras = scene->getCameras();
|
||||
Camera* camera;
|
||||
for (int j = int(cameras.size()) - 1; j >= 0; --j)
|
||||
for (auto& camera: scene->getCameras())
|
||||
{
|
||||
camera = cameras[j];
|
||||
if (camera->isVisible() == false)
|
||||
{
|
||||
continue;
|
||||
|
|
|
@ -301,6 +301,9 @@ THE SOFTWARE.
|
|||
#include "3d/CCSprite3DMaterial.h"
|
||||
#include "3d/CCTerrain.h"
|
||||
|
||||
// vr
|
||||
#include "vr/CCVRGenericRenderer.h"
|
||||
|
||||
|
||||
// Deprecated
|
||||
// All deprecated features are include inside deprecated/CCDeprecated.h.
|
||||
|
|
|
@ -29,6 +29,10 @@ THE SOFTWARE.
|
|||
#include "base/CCDirector.h"
|
||||
#include "base/CCEventDispatcher.h"
|
||||
#include "2d/CCCamera.h"
|
||||
#include "2d/CCScene.h"
|
||||
#include "renderer/CCRenderer.h"
|
||||
#include "vr/CCVRProtocol.h"
|
||||
#include "vr/CCVRGenericRenderer.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
|
@ -103,6 +107,7 @@ GLView::GLView()
|
|||
: _scaleX(1.0f)
|
||||
, _scaleY(1.0f)
|
||||
, _resolutionPolicy(ResolutionPolicy::UNKNOWN)
|
||||
, _vrImpl(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -464,4 +469,38 @@ float GLView::getScaleY() const
|
|||
return _scaleY;
|
||||
}
|
||||
|
||||
void GLView::renderScene(Scene* scene, Renderer* renderer)
|
||||
{
|
||||
CCASSERT(scene, "Invalid Scene");
|
||||
CCASSERT(renderer, "Invalid Renderer");
|
||||
|
||||
if (_vrImpl)
|
||||
{
|
||||
_vrImpl->render(scene, renderer);
|
||||
}
|
||||
else
|
||||
{
|
||||
scene->render(renderer, Mat4::IDENTITY, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
VRIRenderer* GLView::getVR() const
|
||||
{
|
||||
return _vrImpl;
|
||||
}
|
||||
|
||||
void GLView::setVR(VRIRenderer* vrRenderer)
|
||||
{
|
||||
if (_vrImpl != vrRenderer)
|
||||
{
|
||||
if (_vrImpl)
|
||||
delete _vrImpl;
|
||||
|
||||
if (vrRenderer)
|
||||
vrRenderer->setup(this);
|
||||
|
||||
_vrImpl = vrRenderer;
|
||||
}
|
||||
}
|
||||
|
||||
NS_CC_END
|
||||
|
|
|
@ -86,6 +86,10 @@ struct GLContextAttrs
|
|||
|
||||
NS_CC_BEGIN
|
||||
|
||||
class Scene;
|
||||
class Renderer;
|
||||
class VRIRenderer;
|
||||
|
||||
/**
|
||||
* @addtogroup platform
|
||||
* @{
|
||||
|
@ -388,6 +392,19 @@ public:
|
|||
virtual id getCocoaWindow() = 0;
|
||||
#endif /* (CC_TARGET_PLATFORM == CC_PLATFORM_MAC) */
|
||||
|
||||
/**
|
||||
* Renders a Scene with a Renderer
|
||||
* This method is called dirctly by the Director
|
||||
*/
|
||||
void renderScene(Scene* scene, Renderer* renderer);
|
||||
|
||||
/**
|
||||
* Sets a VR renderer.
|
||||
* if `vrrenderer` is `nullptr` VR will be disabled
|
||||
*/
|
||||
void setVR(VRIRenderer* vrrenderer);
|
||||
VRIRenderer* getVR() const;
|
||||
|
||||
protected:
|
||||
void updateDesignResolutionSize();
|
||||
|
||||
|
@ -405,6 +422,9 @@ protected:
|
|||
float _scaleX;
|
||||
float _scaleY;
|
||||
ResolutionPolicy _resolutionPolicy;
|
||||
|
||||
// VR stuff
|
||||
VRIRenderer* _vrImpl;
|
||||
};
|
||||
|
||||
// end of platform group
|
||||
|
|
|
@ -47,7 +47,11 @@ public class Cocos2dxAccelerometer implements SensorEventListener {
|
|||
private final Context mContext;
|
||||
private final SensorManager mSensorManager;
|
||||
private final Sensor mAccelerometer;
|
||||
private final Sensor mCompass;
|
||||
private final int mNaturalOrientation;
|
||||
final float[] accelerometerValues = new float[3];
|
||||
final float[] compassFieldValues = new float[3];
|
||||
static final float ALPHA = 0.25f; // if ALPHA = 1 OR 0, no filter applies.
|
||||
|
||||
// ===========================================================
|
||||
// Constructors
|
||||
|
@ -58,6 +62,7 @@ public class Cocos2dxAccelerometer implements SensorEventListener {
|
|||
|
||||
this.mSensorManager = (SensorManager) this.mContext.getSystemService(Context.SENSOR_SERVICE);
|
||||
this.mAccelerometer = this.mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
|
||||
this.mCompass = this.mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
|
||||
|
||||
final Display display = ((WindowManager) this.mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
|
||||
this.mNaturalOrientation = display.getOrientation();
|
||||
|
@ -67,13 +72,17 @@ public class Cocos2dxAccelerometer implements SensorEventListener {
|
|||
// Getter & Setter
|
||||
// ===========================================================
|
||||
|
||||
public void enable() {
|
||||
public void enableCompass() {
|
||||
this.mSensorManager.registerListener(this, this.mCompass, SensorManager.SENSOR_DELAY_GAME);
|
||||
}
|
||||
|
||||
public void enableAccel() {
|
||||
this.mSensorManager.registerListener(this, this.mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
|
||||
}
|
||||
|
||||
public void setInterval(float interval) {
|
||||
// Honeycomb version is 11
|
||||
if(android.os.Build.VERSION.SDK_INT < 11) {
|
||||
public void setInterval(float interval) {
|
||||
// Honeycomb version is 11
|
||||
if(android.os.Build.VERSION.SDK_INT < 11) {
|
||||
this.mSensorManager.registerListener(this, this.mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
|
||||
} else {
|
||||
//convert seconds to microseconds
|
||||
|
@ -88,41 +97,51 @@ public class Cocos2dxAccelerometer implements SensorEventListener {
|
|||
// ===========================================================
|
||||
// Methods for/from SuperClass/Interfaces
|
||||
// ===========================================================
|
||||
|
||||
@Override
|
||||
public void onSensorChanged(final SensorEvent sensorEvent) {
|
||||
if (sensorEvent.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {
|
||||
return;
|
||||
if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
|
||||
|
||||
float x = sensorEvent.values[0];
|
||||
float y = sensorEvent.values[1];
|
||||
final float z = sensorEvent.values[2];
|
||||
|
||||
// needed by VR code
|
||||
this.accelerometerValues[0] = x;
|
||||
this.accelerometerValues[1] = y;
|
||||
this.accelerometerValues[2] = z;
|
||||
|
||||
/*
|
||||
* Because the axes are not swapped when the device's screen orientation
|
||||
* changes. So we should swap it here. In tablets such as Motorola Xoom,
|
||||
* the default orientation is landscape, so should consider this.
|
||||
*/
|
||||
final int orientation = this.mContext.getResources().getConfiguration().orientation;
|
||||
|
||||
if ((orientation == Configuration.ORIENTATION_LANDSCAPE) && (this.mNaturalOrientation != Surface.ROTATION_0)) {
|
||||
final float tmp = x;
|
||||
x = -y;
|
||||
y = tmp;
|
||||
} else if ((orientation == Configuration.ORIENTATION_PORTRAIT) && (this.mNaturalOrientation != Surface.ROTATION_0)) {
|
||||
final float tmp = x;
|
||||
x = y;
|
||||
y = -tmp;
|
||||
}
|
||||
|
||||
|
||||
Cocos2dxGLSurfaceView.queueAccelerometer(x,y,z,sensorEvent.timestamp);
|
||||
|
||||
/*
|
||||
if(BuildConfig.DEBUG) {
|
||||
Log.d(TAG, "x = " + sensorEvent.values[0] + " y = " + sensorEvent.values[1] + " z = " + pSensorEvent.values[2]);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
float x = sensorEvent.values[0];
|
||||
float y = sensorEvent.values[1];
|
||||
final float z = sensorEvent.values[2];
|
||||
|
||||
/*
|
||||
* Because the axes are not swapped when the device's screen orientation
|
||||
* changes. So we should swap it here. In tablets such as Motorola Xoom,
|
||||
* the default orientation is landscape, so should consider this.
|
||||
*/
|
||||
final int orientation = this.mContext.getResources().getConfiguration().orientation;
|
||||
|
||||
if ((orientation == Configuration.ORIENTATION_LANDSCAPE) && (this.mNaturalOrientation != Surface.ROTATION_0)) {
|
||||
final float tmp = x;
|
||||
x = -y;
|
||||
y = tmp;
|
||||
} else if ((orientation == Configuration.ORIENTATION_PORTRAIT) && (this.mNaturalOrientation != Surface.ROTATION_0)) {
|
||||
final float tmp = x;
|
||||
x = y;
|
||||
y = -tmp;
|
||||
else if (sensorEvent.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
|
||||
// needed by VR code
|
||||
this.compassFieldValues[0] = sensorEvent.values[0];
|
||||
this.compassFieldValues[1] = sensorEvent.values[1];
|
||||
this.compassFieldValues[2] = sensorEvent.values[2];
|
||||
}
|
||||
|
||||
Cocos2dxGLSurfaceView.queueAccelerometer(x,y,z,sensorEvent.timestamp);
|
||||
|
||||
/*
|
||||
if(BuildConfig.DEBUG) {
|
||||
Log.d(TAG, "x = " + sensorEvent.values[0] + " y = " + sensorEvent.values[1] + " z = " + pSensorEvent.values[2]);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -45,6 +45,7 @@ import android.util.DisplayMetrics;
|
|||
import android.util.Log;
|
||||
import android.view.Display;
|
||||
import android.view.WindowManager;
|
||||
import android.hardware.SensorManager;
|
||||
|
||||
import com.android.vending.expansion.zipfile.APKExpansionSupport;
|
||||
import com.android.vending.expansion.zipfile.ZipResourceFile;
|
||||
|
@ -61,6 +62,7 @@ import java.util.Locale;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
public class Cocos2dxHelper {
|
||||
// ===========================================================
|
||||
// Constants
|
||||
|
@ -78,6 +80,7 @@ public class Cocos2dxHelper {
|
|||
private static AssetManager sAssetManager;
|
||||
private static Cocos2dxAccelerometer sCocos2dxAccelerometer;
|
||||
private static boolean sAccelerometerEnabled;
|
||||
private static boolean sCompassEnabled;
|
||||
private static boolean sActivityVisible;
|
||||
private static String sPackageName;
|
||||
private static String sFileDirectory;
|
||||
|
@ -243,9 +246,13 @@ public class Cocos2dxHelper {
|
|||
|
||||
public static void enableAccelerometer() {
|
||||
Cocos2dxHelper.sAccelerometerEnabled = true;
|
||||
Cocos2dxHelper.sCocos2dxAccelerometer.enable();
|
||||
Cocos2dxHelper.sCocos2dxAccelerometer.enableAccel();
|
||||
}
|
||||
|
||||
public static void enableCompass() {
|
||||
Cocos2dxHelper.sCompassEnabled = true;
|
||||
Cocos2dxHelper.sCocos2dxAccelerometer.enableCompass();
|
||||
}
|
||||
|
||||
public static void setAccelerometerInterval(float interval) {
|
||||
Cocos2dxHelper.sCocos2dxAccelerometer.setInterval(interval);
|
||||
|
@ -396,7 +403,10 @@ public class Cocos2dxHelper {
|
|||
public static void onResume() {
|
||||
sActivityVisible = true;
|
||||
if (Cocos2dxHelper.sAccelerometerEnabled) {
|
||||
Cocos2dxHelper.sCocos2dxAccelerometer.enable();
|
||||
Cocos2dxHelper.sCocos2dxAccelerometer.enableAccel();
|
||||
}
|
||||
if (Cocos2dxHelper.sCompassEnabled) {
|
||||
Cocos2dxHelper.sCocos2dxAccelerometer.enableCompass();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -691,5 +701,13 @@ public class Cocos2dxHelper {
|
|||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
//Enhance API modification end
|
||||
public static float[] getAccelValue() {
|
||||
return Cocos2dxHelper.sCocos2dxAccelerometer.accelerometerValues;
|
||||
}
|
||||
|
||||
public static float[] getCompassValue() {
|
||||
return Cocos2dxHelper.sCocos2dxAccelerometer.compassFieldValues;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -67,6 +67,9 @@ namespace cocos2d {
|
|||
JavaVM* JniHelper::_psJavaVM = nullptr;
|
||||
jmethodID JniHelper::loadclassMethod_methodID = nullptr;
|
||||
jobject JniHelper::classloader = nullptr;
|
||||
std::function<void()> JniHelper::classloaderCallback = nullptr;
|
||||
|
||||
jobject JniHelper::_activity = nullptr;
|
||||
std::unordered_map<JNIEnv*, std::vector<jobject>> JniHelper::localRefs;
|
||||
|
||||
JavaVM* JniHelper::getJavaVM() {
|
||||
|
@ -123,6 +126,10 @@ namespace cocos2d {
|
|||
return _env;
|
||||
}
|
||||
|
||||
jobject JniHelper::getActivity() {
|
||||
return _activity;
|
||||
}
|
||||
|
||||
bool JniHelper::setClassLoaderFrom(jobject activityinstance) {
|
||||
JniMethodInfo _getclassloaderMethod;
|
||||
if (!JniHelper::getMethodInfo_DefaultClassLoader(_getclassloaderMethod,
|
||||
|
@ -149,6 +156,10 @@ namespace cocos2d {
|
|||
|
||||
JniHelper::classloader = cocos2d::JniHelper::getEnv()->NewGlobalRef(_c);
|
||||
JniHelper::loadclassMethod_methodID = _m.methodID;
|
||||
JniHelper::_activity = cocos2d::JniHelper::getEnv()->NewGlobalRef(activityinstance);
|
||||
if (JniHelper::classloaderCallback != nullptr){
|
||||
JniHelper::classloaderCallback();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -29,7 +29,9 @@ THE SOFTWARE.
|
|||
#include <string>
|
||||
#include <vector>
|
||||
#include <unordered_map>
|
||||
#include <functional>
|
||||
#include "platform/CCPlatformMacros.h"
|
||||
#include "math/Vec3.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
|
@ -46,6 +48,7 @@ public:
|
|||
static void setJavaVM(JavaVM *javaVM);
|
||||
static JavaVM* getJavaVM();
|
||||
static JNIEnv* getEnv();
|
||||
static jobject getActivity();
|
||||
|
||||
static bool setClassLoaderFrom(jobject activityInstance);
|
||||
static bool getStaticMethodInfo(JniMethodInfo &methodinfo,
|
||||
|
@ -61,6 +64,7 @@ public:
|
|||
|
||||
static jmethodID loadclassMethod_methodID;
|
||||
static jobject classloader;
|
||||
static std::function<void()> classloaderCallback;
|
||||
|
||||
template <typename... Ts>
|
||||
static void callStaticVoidMethod(const std::string& className,
|
||||
|
@ -128,6 +132,57 @@ public:
|
|||
return ret;
|
||||
}
|
||||
|
||||
template <typename... Ts>
|
||||
static float* callStaticFloatArrayMethod(const std::string& className,
|
||||
const std::string& methodName,
|
||||
Ts... xs) {
|
||||
static float ret[32];
|
||||
cocos2d::JniMethodInfo t;
|
||||
std::string signature = "(" + std::string(getJNISignature(xs...)) + ")[F";
|
||||
if (cocos2d::JniHelper::getStaticMethodInfo(t, className.c_str(), methodName.c_str(), signature.c_str())) {
|
||||
jfloatArray array = (jfloatArray) t.env->CallStaticObjectMethod(t.classID, t.methodID, convert(t, xs)...);
|
||||
jsize len = t.env->GetArrayLength(array);
|
||||
if (len <= 32) {
|
||||
jfloat* elems = t.env->GetFloatArrayElements(array, 0);
|
||||
if (elems) {
|
||||
memcpy(ret, elems, sizeof(float) * len);
|
||||
t.env->ReleaseFloatArrayElements(array, elems, 0);
|
||||
};
|
||||
}
|
||||
t.env->DeleteLocalRef(t.classID);
|
||||
deleteLocalRefs(t.env);
|
||||
return &ret[0];
|
||||
} else {
|
||||
reportError(className, methodName, signature);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
template <typename... Ts>
|
||||
static Vec3 callStaticVec3Method(const std::string& className,
|
||||
const std::string& methodName,
|
||||
Ts... xs) {
|
||||
Vec3 ret;
|
||||
cocos2d::JniMethodInfo t;
|
||||
std::string signature = "(" + std::string(getJNISignature(xs...)) + ")[F";
|
||||
if (cocos2d::JniHelper::getStaticMethodInfo(t, className.c_str(), methodName.c_str(), signature.c_str())) {
|
||||
jfloatArray array = (jfloatArray) t.env->CallStaticObjectMethod(t.classID, t.methodID, convert(t, xs)...);
|
||||
jsize len = t.env->GetArrayLength(array);
|
||||
if (len == 3) {
|
||||
jfloat* elems = t.env->GetFloatArrayElements(array, 0);
|
||||
ret.x = elems[0];
|
||||
ret.y = elems[1];
|
||||
ret.z = elems[2];
|
||||
t.env->ReleaseFloatArrayElements(array, elems, 0);
|
||||
}
|
||||
t.env->DeleteLocalRef(t.classID);
|
||||
deleteLocalRefs(t.env);
|
||||
} else {
|
||||
reportError(className, methodName, signature);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
template <typename... Ts>
|
||||
static double callStaticDoubleMethod(const std::string& className,
|
||||
const std::string& methodName,
|
||||
|
@ -175,6 +230,8 @@ private:
|
|||
|
||||
static JavaVM* _psJavaVM;
|
||||
|
||||
static jobject _activity;
|
||||
|
||||
static jstring convert(cocos2d::JniMethodInfo& t, const char* x);
|
||||
|
||||
static jstring convert(cocos2d::JniMethodInfo& t, const std::string& x);
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
****************************************************************************/
|
||||
|
||||
#include "renderer/CCFrameBuffer.h"
|
||||
#include "renderer/CCRenderer.h"
|
||||
#include "base/CCDirector.h"
|
||||
#include "base/CCEventCustom.h"
|
||||
#include "base/CCEventListenerCustom.h"
|
||||
|
@ -314,6 +315,7 @@ FrameBuffer* FrameBuffer::getOrCreateDefaultFBO(GLView* view)
|
|||
return _defaultFBO;
|
||||
}
|
||||
|
||||
|
||||
void FrameBuffer::applyDefaultFBO()
|
||||
{
|
||||
if(_defaultFBO)
|
||||
|
@ -384,6 +386,7 @@ FrameBuffer::FrameBuffer()
|
|||
, _clearDepth(1.0)
|
||||
, _clearStencil(0)
|
||||
, _fbo(0)
|
||||
, _previousFBO(0)
|
||||
, _rt(nullptr)
|
||||
, _rtDepthStencil(nullptr)
|
||||
, _fboBindingDirty(true)
|
||||
|
@ -418,7 +421,7 @@ void FrameBuffer::clearFBO()
|
|||
glClearDepth(_clearDepth);
|
||||
glClearStencil(_clearStencil);
|
||||
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
|
||||
applyDefaultFBO();
|
||||
restoreFBO();
|
||||
}
|
||||
|
||||
void FrameBuffer::attachRenderTarget(RenderTargetBase* rt)
|
||||
|
@ -443,7 +446,9 @@ void FrameBuffer::attachRenderTarget(RenderTargetBase* rt)
|
|||
void FrameBuffer::applyFBO()
|
||||
{
|
||||
CHECK_GL_ERROR_DEBUG();
|
||||
glGetIntegerv(GL_FRAMEBUFFER_BINDING, (GLint*)&_previousFBO);
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
|
||||
// CCASSERT(_fbo==0 || _fbo != _previousFBO, "calling applyFBO without restoring the previous one");
|
||||
CHECK_GL_ERROR_DEBUG();
|
||||
if(_fboBindingDirty && !isDefaultFBO())
|
||||
{
|
||||
|
@ -467,6 +472,11 @@ void FrameBuffer::applyFBO()
|
|||
CHECK_GL_ERROR_DEBUG();
|
||||
}
|
||||
|
||||
void FrameBuffer::restoreFBO()
|
||||
{
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, _previousFBO);
|
||||
}
|
||||
|
||||
void FrameBuffer::attachDepthStencilTarget(RenderTargetDepthStencil* rt)
|
||||
{
|
||||
if(isDefaultFBO())
|
||||
|
|
|
@ -157,6 +157,7 @@ public:
|
|||
//call glclear to clear frame buffer object
|
||||
void clearFBO();
|
||||
void applyFBO();
|
||||
void restoreFBO();
|
||||
void setClearColor(const Color4F& color) { _clearColor = color;}
|
||||
void setClearDepth(float depth) { _clearDepth = depth; }
|
||||
void setClearStencil(int8_t stencil) { _clearStencil = stencil; }
|
||||
|
@ -180,6 +181,7 @@ CC_CONSTRUCTOR_ACCESS:
|
|||
private:
|
||||
//openGL content for FrameBuffer
|
||||
GLuint _fbo;
|
||||
GLuint _previousFBO;
|
||||
//dirty flag for fbo binding
|
||||
bool _fboBindingDirty;
|
||||
//
|
||||
|
|
|
@ -404,6 +404,8 @@ void Renderer::processRenderCommand(RenderCommand* command)
|
|||
{
|
||||
flush3D();
|
||||
|
||||
CCGL_DEBUG_INSERT_EVENT_MARKER("RENDERER_MESH_COMMAND");
|
||||
|
||||
if(cmd->isSkipBatching())
|
||||
{
|
||||
// XXX: execute() will call bind() and unbind()
|
||||
|
@ -420,6 +422,7 @@ void Renderer::processRenderCommand(RenderCommand* command)
|
|||
}
|
||||
else
|
||||
{
|
||||
CCGL_DEBUG_INSERT_EVENT_MARKER("RENDERER_MESH_COMMAND");
|
||||
cmd->batchDraw();
|
||||
}
|
||||
}
|
||||
|
@ -427,24 +430,29 @@ void Renderer::processRenderCommand(RenderCommand* command)
|
|||
{
|
||||
flush();
|
||||
int renderQueueID = ((GroupCommand*) command)->getRenderQueueID();
|
||||
CCGL_DEBUG_PUSH_GROUP_MARKER("RENDERER_GROUP_COMMAND");
|
||||
visitRenderQueue(_renderGroups[renderQueueID]);
|
||||
CCGL_DEBUG_POP_GROUP_MARKER();
|
||||
}
|
||||
else if(RenderCommand::Type::CUSTOM_COMMAND == commandType)
|
||||
{
|
||||
flush();
|
||||
auto cmd = static_cast<CustomCommand*>(command);
|
||||
CCGL_DEBUG_INSERT_EVENT_MARKER("RENDERER_CUSTOM_COMMAND");
|
||||
cmd->execute();
|
||||
}
|
||||
else if(RenderCommand::Type::BATCH_COMMAND == commandType)
|
||||
{
|
||||
flush();
|
||||
auto cmd = static_cast<BatchCommand*>(command);
|
||||
CCGL_DEBUG_INSERT_EVENT_MARKER("RENDERER_BATCH_COMMAND");
|
||||
cmd->execute();
|
||||
}
|
||||
else if(RenderCommand::Type::PRIMITIVE_COMMAND == commandType)
|
||||
{
|
||||
flush();
|
||||
auto cmd = static_cast<PrimitiveCommand*>(command);
|
||||
CCGL_DEBUG_INSERT_EVENT_MARKER("RENDERER_PRIMITIVE_COMMAND");
|
||||
cmd->execute();
|
||||
}
|
||||
else
|
||||
|
@ -718,6 +726,8 @@ void Renderer::drawBatchedTriangles()
|
|||
if(_queuedTriangleCommands.empty())
|
||||
return;
|
||||
|
||||
CCGL_DEBUG_INSERT_EVENT_MARKER("RENDERER_BATCH_TRIANGLES");
|
||||
|
||||
_filledVertex = 0;
|
||||
_filledIndex = 0;
|
||||
|
||||
|
@ -866,6 +876,8 @@ void Renderer::flush3D()
|
|||
{
|
||||
if (_lastBatchedMeshCommand)
|
||||
{
|
||||
CCGL_DEBUG_INSERT_EVENT_MARKER("RENDERER_BATCH_MESH");
|
||||
|
||||
_lastBatchedMeshCommand->postBatchDraw();
|
||||
_lastBatchedMeshCommand = nullptr;
|
||||
}
|
||||
|
|
|
@ -34,6 +34,23 @@
|
|||
#include "renderer/CCGLProgram.h"
|
||||
#include "platform/CCGL.h"
|
||||
|
||||
#if !defined(NDEBUG) && CC_TARGET_PLATFORM == CC_PLATFORM_IOS
|
||||
|
||||
/// Basic wrapper for glInsertEventMarkerEXT() depending on the current build settings and platform.
|
||||
#define CCGL_DEBUG_INSERT_EVENT_MARKER(__message__) glInsertEventMarkerEXT(0, __message__)
|
||||
/// Basic wrapper for glPushGroupMarkerEXT() depending on the current build settings and platform.
|
||||
#define CCGL_DEBUG_PUSH_GROUP_MARKER(__message__) glPushGroupMarkerEXT(0, __message__)
|
||||
/// Basic wrapper for CCGL_DEBUG_POP_GROUP_MARKER() depending on the current build settings and platform.
|
||||
#define CCGL_DEBUG_POP_GROUP_MARKER() glPopGroupMarkerEXT()
|
||||
|
||||
#else
|
||||
|
||||
#define CCGL_DEBUG_INSERT_EVENT_MARKER(__message__)
|
||||
#define CCGL_DEBUG_PUSH_GROUP_MARKER(__message__)
|
||||
#define CCGL_DEBUG_POP_GROUP_MARKER()
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @addtogroup renderer
|
||||
* @{
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2016 Google Inc.
|
||||
Copyright (c) 2016 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
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.
|
||||
****************************************************************************/
|
||||
|
||||
#include "vr/CCVRDistortion.h"
|
||||
#include <math.h>
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
Distortion::Distortion()
|
||||
{
|
||||
_coefficients[0] = 0.441f;
|
||||
_coefficients[1] = 0.156f;
|
||||
}
|
||||
|
||||
void Distortion::setCoefficients(float *coefficients)
|
||||
{
|
||||
for (int i = 0; i < s_numberOfCoefficients; i++)
|
||||
{
|
||||
_coefficients[i] = coefficients[i];
|
||||
}
|
||||
}
|
||||
|
||||
float *Distortion::coefficients()
|
||||
{
|
||||
return _coefficients;
|
||||
}
|
||||
|
||||
float Distortion::distortionFactor(float radius)
|
||||
{
|
||||
float result = 1.0f;
|
||||
float rFactor = 1.0f;
|
||||
float squaredRadius = radius * radius;
|
||||
for (int i = 0; i < s_numberOfCoefficients; i++)
|
||||
{
|
||||
rFactor *= squaredRadius;
|
||||
result += _coefficients[i] * rFactor;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
float Distortion::distort(float radius)
|
||||
{
|
||||
return radius * distortionFactor(radius);
|
||||
}
|
||||
|
||||
float Distortion::distortInverse(float radius)
|
||||
{
|
||||
float r0 = radius / 0.9f;
|
||||
float r = radius * 0.9f;
|
||||
float dr0 = radius - distort(r0);
|
||||
while (fabsf(r - r0) > 0.0001f)
|
||||
{
|
||||
float dr = radius - distort(r);
|
||||
float r2 = r - dr * ((r - r0) / (dr - dr0));
|
||||
r0 = r;
|
||||
r = r2;
|
||||
dr0 = dr;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
NS_CC_END
|
|
@ -0,0 +1,53 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2016 Google Inc.
|
||||
Copyright (c) 2016 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
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 CCVRDistortion_h
|
||||
#define CCVRDistortion_h
|
||||
|
||||
#include "platform/CCPlatformMacros.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
// Barrel Distortion
|
||||
class Distortion
|
||||
{
|
||||
public:
|
||||
Distortion();
|
||||
|
||||
void setCoefficients(float *coefficients);
|
||||
float *coefficients();
|
||||
|
||||
float distortionFactor(float radius);
|
||||
float distort(float radius);
|
||||
float distortInverse(float radius);
|
||||
|
||||
private:
|
||||
static const int s_numberOfCoefficients = 2;
|
||||
float _coefficients[s_numberOfCoefficients];
|
||||
};
|
||||
|
||||
NS_CC_END
|
||||
|
||||
#endif /* CCVRDistortion_h */
|
|
@ -0,0 +1,153 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2016 Google Inc.
|
||||
Copyright (c) 2016 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
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.
|
||||
****************************************************************************/
|
||||
|
||||
#include "vr/CCVRDistortionMesh.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "vr/CCVRDistortion.h"
|
||||
#include "math/Vec2.h"
|
||||
#include "platform/CCGL.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
DistortionMesh::DistortionMesh(Distortion *distortion,
|
||||
float screenWidth, float screenHeight,
|
||||
float xEyeOffsetScreen, float yEyeOffsetScreen,
|
||||
float textureWidth, float textureHeight,
|
||||
float xEyeOffsetTexture, float yEyeOffsetTexture,
|
||||
float viewportXTexture, float viewportYTexture,
|
||||
float viewportWidthTexture, float viewportHeightTexture,
|
||||
bool vignetteEnabled)
|
||||
: _indices(-1)
|
||||
, _arrayBufferID(-1)
|
||||
, _elementBufferID(-1)
|
||||
{
|
||||
const int rows = 40;
|
||||
const int cols = 40;
|
||||
|
||||
GLfloat vertexData[rows * cols * 5];
|
||||
|
||||
int vertexOffset = 0;
|
||||
|
||||
const float vignetteSizeTanAngle = 0.05f;
|
||||
|
||||
const float maxDistance = sqrtf(textureWidth * textureWidth + textureHeight * textureHeight) / 4;
|
||||
|
||||
for (int row = 0; row < rows; row++)
|
||||
{
|
||||
for (int col = 0; col < cols; col++)
|
||||
{
|
||||
const float uTexture = col / (cols-1.0f) * (viewportWidthTexture / textureWidth) + viewportXTexture / textureWidth;
|
||||
const float vTexture = row / (rows-1.0f) * (viewportHeightTexture / textureHeight) + viewportYTexture / textureHeight;
|
||||
|
||||
const float xTexture = uTexture * textureWidth - xEyeOffsetTexture;
|
||||
const float yTexture = vTexture * textureHeight - yEyeOffsetTexture;
|
||||
const float rTexture = sqrtf(xTexture * xTexture + yTexture * yTexture) / maxDistance;
|
||||
|
||||
const float textureToScreen = (rTexture > 0.0f) ? distortion->distortInverse(rTexture) / rTexture : 1.0f;
|
||||
|
||||
const float xScreen = xTexture * textureToScreen;
|
||||
const float yScreen = yTexture * textureToScreen;
|
||||
|
||||
const float uScreen = (xScreen + xEyeOffsetScreen) / screenWidth;
|
||||
const float vScreen = (yScreen + yEyeOffsetScreen) / screenHeight;
|
||||
|
||||
const float vignetteSizeTexture = vignetteSizeTanAngle / textureToScreen;
|
||||
|
||||
const float dxTexture = xTexture + xEyeOffsetTexture - clampf(xTexture + xEyeOffsetTexture,
|
||||
viewportXTexture + vignetteSizeTexture,
|
||||
viewportXTexture + viewportWidthTexture - vignetteSizeTexture);
|
||||
const float dyTexture = yTexture + yEyeOffsetTexture - clampf(yTexture + yEyeOffsetTexture,
|
||||
viewportYTexture + vignetteSizeTexture,
|
||||
viewportYTexture + viewportHeightTexture - vignetteSizeTexture);
|
||||
const float drTexture = sqrtf(dxTexture * dxTexture + dyTexture * dyTexture);
|
||||
|
||||
float vignette = 1.0f;
|
||||
if (vignetteEnabled)
|
||||
vignette = 1.0f - clampf(drTexture / vignetteSizeTexture, 0.0f, 1.0f);
|
||||
|
||||
// position x,y (vertices)
|
||||
vertexData[(vertexOffset + 0)] = 2.0f * uScreen - 1.0f;
|
||||
vertexData[(vertexOffset + 1)] = 2.0f * vScreen - 1.0f;
|
||||
|
||||
// texture u,v
|
||||
vertexData[(vertexOffset + 2)] = uTexture;
|
||||
vertexData[(vertexOffset + 3)] = vTexture;
|
||||
|
||||
// vignete
|
||||
vertexData[(vertexOffset + 4)] = vignette;
|
||||
|
||||
vertexOffset += 5;
|
||||
}
|
||||
}
|
||||
|
||||
_indices = (rows-1)*cols*2+rows-2;
|
||||
// GLshort indexData[_indices];
|
||||
std::vector<GLshort> indexData(_indices);
|
||||
const int indexDataSize = _indices * sizeof(GLshort);
|
||||
|
||||
int indexOffset = 0;
|
||||
vertexOffset = 0;
|
||||
for (int row = 0; row < rows-1; row++)
|
||||
{
|
||||
if (row > 0)
|
||||
{
|
||||
indexData[indexOffset] = indexData[(indexOffset - 1)];
|
||||
indexOffset++;
|
||||
}
|
||||
for (int col = 0; col < cols; col++)
|
||||
{
|
||||
if (col > 0)
|
||||
{
|
||||
if (row % 2 == 0)
|
||||
vertexOffset++;
|
||||
else
|
||||
vertexOffset--;
|
||||
}
|
||||
indexData[(indexOffset++)] = vertexOffset;
|
||||
indexData[(indexOffset++)] = (vertexOffset + cols);
|
||||
}
|
||||
vertexOffset += rows;
|
||||
}
|
||||
|
||||
GLuint bufferIDs[2] = { 0, 0 };
|
||||
glGenBuffers(2, bufferIDs);
|
||||
_arrayBufferID = bufferIDs[0];
|
||||
_elementBufferID = bufferIDs[1];
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, _arrayBufferID);
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _elementBufferID);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexDataSize, &indexData[0], GL_STATIC_DRAW);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
|
||||
// GLCheckForError();
|
||||
}
|
||||
|
||||
NS_CC_END
|
|
@ -0,0 +1,56 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2016 Google Inc.
|
||||
Copyright (c) 2016 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
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 CCVRDistortionMesh_hpp
|
||||
#define CCVRDistortionMesh_hpp
|
||||
|
||||
#include "platform/CCPlatformMacros.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
class Distortion;
|
||||
|
||||
class DistortionMesh
|
||||
{
|
||||
public:
|
||||
DistortionMesh();
|
||||
DistortionMesh(Distortion *distortion,
|
||||
float screenWidth, float screenHeight,
|
||||
float xEyeOffsetScreen, float yEyeOffsetScreen,
|
||||
float textureWidth, float textureHeight,
|
||||
float xEyeOffsetTexture, float yEyeOffsetTexture,
|
||||
float viewportXTexture, float viewportYTexture,
|
||||
float viewportWidthTexture,
|
||||
float viewportHeightTexture,
|
||||
bool vignetteEnabled);
|
||||
|
||||
int _indices;
|
||||
int _arrayBufferID;
|
||||
int _elementBufferID;
|
||||
};
|
||||
|
||||
NS_CC_END
|
||||
|
||||
#endif /* CCVRDistortionMesh_h */
|
|
@ -0,0 +1,261 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2016 Google Inc.
|
||||
Copyright (c) 2016 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
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.
|
||||
****************************************************************************/
|
||||
|
||||
// IMPORTANT
|
||||
// For iOS/Mac, this file is treated as an "Objective-C++" file.
|
||||
// To change this behvior, use the File Inspector from Xcode
|
||||
|
||||
#include "vr/CCVRGenericHeadTracker.h"
|
||||
#include "platform/CCPlatformMacros.h"
|
||||
#include "platform/CCDevice.h"
|
||||
|
||||
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
|
||||
#import <CoreMotion/CoreMotion.h>
|
||||
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
|
||||
#include <jni.h>
|
||||
#include "platform/android/jni/JniHelper.h"
|
||||
#endif
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
//////
|
||||
|
||||
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
|
||||
static Mat4 matrixFromRotationMatrix(const CMRotationMatrix& rotationMatrix)
|
||||
{
|
||||
return Mat4(rotationMatrix.m11,
|
||||
rotationMatrix.m21,
|
||||
rotationMatrix.m31,
|
||||
0.0f,
|
||||
|
||||
rotationMatrix.m12,
|
||||
rotationMatrix.m22,
|
||||
rotationMatrix.m32,
|
||||
0.0f,
|
||||
|
||||
rotationMatrix.m13,
|
||||
rotationMatrix.m23,
|
||||
rotationMatrix.m33,
|
||||
0.0f,
|
||||
|
||||
0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
1.0f);
|
||||
}
|
||||
|
||||
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
|
||||
|
||||
// getRotationMatrix taken from Android's SensorManager.java
|
||||
Mat4 getRotationMatrix(const Vec3& gravity, const Vec3& geomagnetic)
|
||||
{
|
||||
float Ax = gravity.x;
|
||||
float Ay = gravity.y;
|
||||
float Az = gravity.z;
|
||||
|
||||
const float normsqA = (Ax*Ax + Ay*Ay + Az*Az);
|
||||
const float g = 9.81f;
|
||||
const float freeFallGravitySquared = 0.01f * g * g;
|
||||
if (normsqA < freeFallGravitySquared) {
|
||||
// gravity less than 10% of normal value
|
||||
return Mat4::IDENTITY;
|
||||
}
|
||||
|
||||
const float Ex = geomagnetic.x;
|
||||
const float Ey = geomagnetic.y;
|
||||
const float Ez = geomagnetic.z;
|
||||
float Hx = Ey*Az - Ez*Ay;
|
||||
float Hy = Ez*Ax - Ex*Az;
|
||||
float Hz = Ex*Ay - Ey*Ax;
|
||||
const float normH = std::sqrt(Hx*Hx + Hy*Hy + Hz*Hz);
|
||||
|
||||
if (normH < 0.1f) {
|
||||
// device is close to free fall (or in space?), or close to
|
||||
// magnetic north pole. Typical values are > 100.
|
||||
return Mat4::IDENTITY;
|
||||
}
|
||||
const float invH = 1.0f / normH;
|
||||
Hx *= invH;
|
||||
Hy *= invH;
|
||||
Hz *= invH;
|
||||
const float invA = 1.0f / std::sqrt(Ax*Ax + Ay*Ay + Az*Az);
|
||||
Ax *= invA;
|
||||
Ay *= invA;
|
||||
Az *= invA;
|
||||
const float Mx = Ay*Hz - Az*Hy;
|
||||
const float My = Az*Hx - Ax*Hz;
|
||||
const float Mz = Ax*Hy - Ay*Hx;
|
||||
|
||||
return Mat4( Hx, Mx, Ax, 0,
|
||||
Hy, My, Ay, 0,
|
||||
Hz, Mz, Az, 0,
|
||||
0, 0, 0, 1);
|
||||
}
|
||||
|
||||
Vec3 lowPass(const Vec3& input, const Vec3& prev)
|
||||
{
|
||||
// if ALPHA = 1 OR 0, no filter applies.
|
||||
static const float ALPHA = 0.12f;
|
||||
return Vec3(prev.x + ALPHA * (input.x - prev.x),
|
||||
prev.y + ALPHA * (input.y - prev.y),
|
||||
prev.z + ALPHA * (input.z - prev.z));
|
||||
}
|
||||
|
||||
#endif // (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
|
||||
|
||||
static Mat4 getRotateEulerMatrix(float x, float y, float z)
|
||||
{
|
||||
x *= (float)(M_PI / 180.0f);
|
||||
y *= (float)(M_PI / 180.0f);
|
||||
z *= (float)(M_PI / 180.0f);
|
||||
float cx = (float) cos(x);
|
||||
float sx = (float) sin(x);
|
||||
float cy = (float) cos(y);
|
||||
float sy = (float) sin(y);
|
||||
float cz = (float) cos(z);
|
||||
float sz = (float) sin(z);
|
||||
float cxsy = cx * sy;
|
||||
float sxsy = sx * sy;
|
||||
Mat4 matrix;
|
||||
matrix.m[0] = cy * cz;
|
||||
matrix.m[1] = -cy * sz;
|
||||
matrix.m[2] = sy;
|
||||
matrix.m[3] = 0.0f;
|
||||
matrix.m[4] = cxsy * cz + cx * sz;
|
||||
matrix.m[5] = -cxsy * sz + cx * cz;
|
||||
matrix.m[6] = -sx * cy;
|
||||
matrix.m[7] = 0.0f;
|
||||
matrix.m[8] = -sxsy * cz + sx * sz;
|
||||
matrix.m[9] = sxsy * sz + sx * cz;
|
||||
matrix.m[10] = cx * cy;
|
||||
matrix.m[11] = 0.0f;
|
||||
matrix.m[12] = 0.0f;
|
||||
matrix.m[13] = 0.0f;
|
||||
matrix.m[14] = 0.0f;
|
||||
matrix.m[15] = 1.0f;
|
||||
return matrix;
|
||||
}
|
||||
|
||||
VRGenericHeadTracker::VRGenericHeadTracker()
|
||||
: _localPosition(Vec3::ZERO)
|
||||
{
|
||||
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
|
||||
_motionMgr = [[CMMotionManager alloc] init];
|
||||
#endif
|
||||
|
||||
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
|
||||
startTracking();
|
||||
#endif
|
||||
}
|
||||
|
||||
VRGenericHeadTracker::~VRGenericHeadTracker()
|
||||
{
|
||||
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) || (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
|
||||
stopTracking();
|
||||
#endif
|
||||
|
||||
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
|
||||
[(CMMotionManager*)_motionMgr release];
|
||||
#endif
|
||||
}
|
||||
|
||||
void VRGenericHeadTracker::startTracking()
|
||||
{
|
||||
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
|
||||
CMMotionManager* motionMgr = (CMMotionManager*)_motionMgr;
|
||||
if (motionMgr.isDeviceMotionAvailable && !motionMgr.isDeviceMotionActive)
|
||||
{
|
||||
[motionMgr startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryZVertical];
|
||||
}
|
||||
|
||||
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
|
||||
if (orientation == UIInterfaceOrientationLandscapeLeft)
|
||||
{
|
||||
_deviceToDisplay = getRotateEulerMatrix(0.f, 0.f, 90.f);
|
||||
}
|
||||
else if (orientation == UIInterfaceOrientationLandscapeRight)
|
||||
{
|
||||
_deviceToDisplay = getRotateEulerMatrix(0.f, 0.f, -90.f);
|
||||
}
|
||||
|
||||
// the inertial reference frame has z up and x forward, while the world has z out and x right
|
||||
_worldToInertialReferenceFrame = getRotateEulerMatrix(-90.f, 0.f, 90.f);
|
||||
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
|
||||
_deviceToDisplay = getRotateEulerMatrix(0.f, 0.f, -90.f);
|
||||
_worldToInertialReferenceFrame = getRotateEulerMatrix(-90.f, 0.f, 90.f);
|
||||
JniHelper::callStaticVoidMethod("org/cocos2dx/lib/Cocos2dxHelper", "enableAccelerometer");
|
||||
JniHelper::callStaticVoidMethod("org/cocos2dx/lib/Cocos2dxHelper", "enableCompass");
|
||||
#endif
|
||||
}
|
||||
|
||||
void VRGenericHeadTracker::stopTracking()
|
||||
{
|
||||
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
|
||||
[(CMMotionManager*)_motionMgr stopDeviceMotionUpdates];
|
||||
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
|
||||
Device::setAccelerometerEnabled(false);
|
||||
#endif
|
||||
}
|
||||
|
||||
Vec3 VRGenericHeadTracker::getLocalPosition()
|
||||
{
|
||||
return _localPosition;
|
||||
}
|
||||
|
||||
Mat4 VRGenericHeadTracker::getLocalRotation()
|
||||
{
|
||||
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
|
||||
CMMotionManager* motionMgr = (CMMotionManager*)_motionMgr;
|
||||
CMDeviceMotion *motion = motionMgr.deviceMotion;
|
||||
|
||||
CMRotationMatrix rotationMatrix = motion.attitude.rotationMatrix;
|
||||
Mat4 inertialReferenceFrameToDevice0 = matrixFromRotationMatrix(rotationMatrix); // note the matrix inversion
|
||||
Mat4 inertialReferenceFrameToDevice = inertialReferenceFrameToDevice0.getTransposed();
|
||||
Mat4 worldToDevice = inertialReferenceFrameToDevice * _worldToInertialReferenceFrame;
|
||||
return _deviceToDisplay * worldToDevice;
|
||||
|
||||
#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
|
||||
static Vec3 prevAccel = Vec3(0,0,0);
|
||||
static Vec3 prevCompass = Vec3(0,0,0);
|
||||
|
||||
Vec3 accel = JniHelper::callStaticVec3Method("org/cocos2dx/lib/Cocos2dxHelper", "getAccelValue");
|
||||
Vec3 compass = JniHelper::callStaticVec3Method("org/cocos2dx/lib/Cocos2dxHelper", "getCompassValue");
|
||||
|
||||
// CCLOG("accel: %f, %f, %f.... compass: %f, %f, %f", accel.x, accel.y, accel.z, compass.x, compass.y, compass.z);
|
||||
prevAccel = lowPass(accel, prevAccel);
|
||||
prevCompass = lowPass(compass, prevCompass);
|
||||
// CCLOG("low pass accel: %f, %f, %f.... compass: %f, %f, %f", prevAccel.x, prevAccel.y, prevAccel.z, prevCompass.x, prevCompass.y, prevCompass.z);
|
||||
|
||||
Mat4 rotMatrix = getRotationMatrix(prevAccel, prevCompass);
|
||||
|
||||
Mat4 inertialReferenceFrameToDevice(rotMatrix);
|
||||
Mat4 worldToDevice = inertialReferenceFrameToDevice * _worldToInertialReferenceFrame;
|
||||
return _deviceToDisplay * worldToDevice;
|
||||
#else
|
||||
return Mat4::IDENTITY;
|
||||
#endif
|
||||
}
|
||||
|
||||
NS_CC_END
|
|
@ -0,0 +1,58 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2016 Google Inc.
|
||||
Copyright (c) 2016 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
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 CCVRGenericHeadTracker_hpp
|
||||
#define CCVRGenericHeadTracker_hpp
|
||||
|
||||
#include "vr/CCVRProtocol.h"
|
||||
#include "math/Vec3.h"
|
||||
#include "math/Mat4.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
class CC_DLL VRGenericHeadTracker : public VRIHeadTracker
|
||||
{
|
||||
public:
|
||||
VRGenericHeadTracker();
|
||||
virtual ~VRGenericHeadTracker();
|
||||
|
||||
virtual Vec3 getLocalPosition();
|
||||
virtual Mat4 getLocalRotation();
|
||||
|
||||
protected:
|
||||
void startTracking();
|
||||
void stopTracking();
|
||||
|
||||
Vec3 _localPosition;
|
||||
|
||||
Mat4 _deviceToDisplay;
|
||||
Mat4 _worldToInertialReferenceFrame;
|
||||
|
||||
void* _motionMgr;
|
||||
};
|
||||
|
||||
NS_CC_END
|
||||
|
||||
#endif /* CCVRGenericHeadTracker_hpp */
|
|
@ -0,0 +1,227 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2016 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
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.
|
||||
****************************************************************************/
|
||||
|
||||
#include "platform/CCPlatformMacros.h"
|
||||
#include "vr/CCVRGenericRenderer.h"
|
||||
#include "vr/CCVRDistortionMesh.h"
|
||||
#include "vr/CCVRDistortion.h"
|
||||
#include "vr/CCVRGenericHeadTracker.h"
|
||||
#include "renderer/CCRenderer.h"
|
||||
#include "renderer/CCGLProgramState.h"
|
||||
#include "renderer/ccGLStateCache.h"
|
||||
#include "base/CCDirector.h"
|
||||
#include "2d/CCScene.h"
|
||||
#include "2d/CCCamera.h"
|
||||
#include "2d/CCSprite.h"
|
||||
#include "platform/CCGLView.h"
|
||||
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
VRGenericRenderer::VRGenericRenderer()
|
||||
: _vignetteEnabled(true)
|
||||
, _distortion(nullptr)
|
||||
, _leftDistortionMesh(nullptr)
|
||||
, _rightDistortionMesh(nullptr)
|
||||
, _glProgramState(nullptr)
|
||||
{
|
||||
_headTracker = new VRGenericHeadTracker;
|
||||
}
|
||||
|
||||
VRGenericRenderer::~VRGenericRenderer()
|
||||
{
|
||||
CC_SAFE_DELETE(_headTracker);
|
||||
CC_SAFE_RELEASE(_glProgramState);
|
||||
CC_SAFE_RELEASE(_fb);
|
||||
CC_SAFE_DELETE(_distortion);
|
||||
CC_SAFE_DELETE(_leftDistortionMesh);
|
||||
CC_SAFE_DELETE(_rightDistortionMesh);
|
||||
}
|
||||
|
||||
void VRGenericRenderer::setup(GLView* glview)
|
||||
{
|
||||
// CC_UNUSED(glview);
|
||||
|
||||
// set origin to 0,0 in case origin is not 0,0
|
||||
auto vp = Camera::getDefaultViewport();
|
||||
|
||||
_leftEye.viewport._bottom = vp._bottom/2 + vp._height/4;
|
||||
_leftEye.viewport._left = vp._left/4;
|
||||
_leftEye.viewport._width = vp._width/2;
|
||||
_leftEye.viewport._height = vp._height/2;
|
||||
|
||||
_rightEye.viewport._bottom = vp._bottom/2 + vp._height/4;
|
||||
_rightEye.viewport._left = _leftEye.viewport._width + vp._left/2;
|
||||
_rightEye.viewport._width = vp._width/2;
|
||||
_rightEye.viewport._height = vp._height/2;
|
||||
|
||||
|
||||
_texSize = Size(vp._width, vp._height);
|
||||
|
||||
_fb = experimental::FrameBuffer::create(1, _texSize.width, _texSize.height);
|
||||
_fb->retain();
|
||||
auto rt = experimental::RenderTarget::create(_texSize.width, _texSize.height);
|
||||
auto ds = experimental::RenderTargetDepthStencil::create(_texSize.width, _texSize.height);
|
||||
_fb->attachRenderTarget(rt);
|
||||
_fb->attachDepthStencilTarget(ds);
|
||||
_fb->setClearColor(Color4F(0,0,0,1));
|
||||
|
||||
|
||||
_distortion = new Distortion;
|
||||
_leftDistortionMesh = createDistortionMesh(VREye::EyeType::LEFT);
|
||||
_rightDistortionMesh = createDistortionMesh(VREye::EyeType::RIGHT);
|
||||
|
||||
setupGLProgram();
|
||||
}
|
||||
|
||||
void VRGenericRenderer::cleanup()
|
||||
{
|
||||
}
|
||||
|
||||
VRIHeadTracker* VRGenericRenderer::getHeadTracker()
|
||||
{
|
||||
return _headTracker;
|
||||
}
|
||||
|
||||
void VRGenericRenderer::render(Scene* scene, Renderer* renderer)
|
||||
{
|
||||
// FIXME: Use correct eye displacement
|
||||
const float eyeOffset = 0.5;
|
||||
|
||||
auto headRotation = _headTracker->getLocalRotation();
|
||||
Mat4 leftTransform;
|
||||
Mat4::createTranslation(eyeOffset, 0, 0, &leftTransform);
|
||||
leftTransform *= headRotation;
|
||||
|
||||
Mat4 rightTransform;
|
||||
Mat4::createTranslation(-eyeOffset, 0, 0, &rightTransform);
|
||||
rightTransform *= headRotation;
|
||||
|
||||
_fb->applyFBO();
|
||||
Camera::setDefaultViewport(_leftEye.viewport);
|
||||
scene->render(renderer, leftTransform, nullptr);
|
||||
Camera::setDefaultViewport(_rightEye.viewport);
|
||||
scene->render(renderer, rightTransform, nullptr);
|
||||
_fb->restoreFBO();
|
||||
|
||||
auto texture = _fb->getRenderTarget()->getTexture();
|
||||
GL::bindTexture2D(texture->getName());
|
||||
_glProgramState->apply(Mat4::IDENTITY);
|
||||
|
||||
GLint origViewport[4];
|
||||
glGetIntegerv(GL_VIEWPORT, origViewport);
|
||||
glViewport(0, 0, _texSize.width, _texSize.height);
|
||||
|
||||
renderDistortionMesh(_leftDistortionMesh, texture->getName());
|
||||
renderDistortionMesh(_rightDistortionMesh, texture->getName());
|
||||
|
||||
|
||||
glViewport(origViewport[0], origViewport[1], origViewport[2], origViewport[3]);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
|
||||
CHECK_GL_ERROR_DEBUG();
|
||||
}
|
||||
|
||||
void VRGenericRenderer::renderDistortionMesh(DistortionMesh *mesh, GLint textureID)
|
||||
{
|
||||
glBindBuffer(GL_ARRAY_BUFFER, mesh->_arrayBufferID);
|
||||
|
||||
_glProgramState->setVertexAttribPointer("a_position", 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *)(0 * sizeof(float)));
|
||||
_glProgramState->setVertexAttribPointer("a_textureCoord", 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *)(2 * sizeof(float)));
|
||||
_glProgramState->setVertexAttribPointer("a_vignette", 1, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void *)(4 * sizeof(float)));
|
||||
_glProgramState->setUniformTexture("u_textureSampler", textureID);
|
||||
|
||||
_glProgramState->apply(Mat4::IDENTITY);
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh->_elementBufferID);
|
||||
glDrawElements(GL_TRIANGLE_STRIP, mesh->_indices, GL_UNSIGNED_SHORT, 0);
|
||||
|
||||
CHECK_GL_ERROR_DEBUG();
|
||||
}
|
||||
|
||||
DistortionMesh* VRGenericRenderer::createDistortionMesh(VREye::EyeType eyeType)
|
||||
{
|
||||
auto vp = Camera::getDefaultViewport();
|
||||
|
||||
const float screenWidth = _texSize.width;
|
||||
const float screenHeight = _texSize.height;
|
||||
const float xEyeOffsetScreen = (eyeType == VREye::EyeType::LEFT) ? screenWidth/4 + vp._left : screenWidth*3/4 + vp._left;
|
||||
const float yEyeOffsetScreen = screenHeight/2 + vp._bottom;
|
||||
|
||||
const float textureWidth = _texSize.width;
|
||||
const float textureHeight = _texSize.height;
|
||||
const float xEyeOffsetTexture = (eyeType == VREye::EyeType::LEFT) ? _texSize.width/4 : _texSize.width*3/4;
|
||||
const float yEyeOffsetTexture = _texSize.height/2;
|
||||
|
||||
const float viewportX = (eyeType == VREye::EyeType::LEFT) ? 0 : textureWidth/2;
|
||||
const float viewportY = 0;
|
||||
const float viewportW = textureWidth/2;
|
||||
const float viewportH = textureHeight;
|
||||
|
||||
return new DistortionMesh(_distortion,
|
||||
screenWidth, screenHeight,
|
||||
xEyeOffsetScreen, yEyeOffsetScreen,
|
||||
textureWidth, textureHeight,
|
||||
xEyeOffsetTexture, yEyeOffsetTexture,
|
||||
viewportX, viewportY,
|
||||
viewportW, viewportH,
|
||||
_vignetteEnabled);
|
||||
}
|
||||
|
||||
void VRGenericRenderer::setupGLProgram()
|
||||
{
|
||||
const GLchar *vertexShader =
|
||||
"\
|
||||
attribute vec2 a_position;\n\
|
||||
attribute vec2 a_textureCoord;\n\
|
||||
attribute float a_vignette;\n\
|
||||
varying vec2 v_textureCoord;\n\
|
||||
varying float v_vignette;\n\
|
||||
void main() {\n\
|
||||
gl_Position = vec4(a_position, 0.0, 1.0);\n\
|
||||
v_textureCoord = a_textureCoord.xy;\n\
|
||||
v_vignette = a_vignette;\n\
|
||||
}\n";
|
||||
|
||||
const GLchar *fragmentShader =
|
||||
"\
|
||||
#ifdef GL_ES\n\
|
||||
precision mediump float;\n\
|
||||
#endif\n\
|
||||
varying vec2 v_textureCoord;\n\
|
||||
varying float v_vignette;\n\
|
||||
uniform sampler2D u_textureSampler;\n\
|
||||
void main() {\n\
|
||||
gl_FragColor = v_vignette * texture2D(u_textureSampler, v_textureCoord);\n\
|
||||
}\n";
|
||||
|
||||
auto program = GLProgram::createWithByteArrays(vertexShader, fragmentShader);
|
||||
_glProgramState = GLProgramState::getOrCreateWithGLProgram(program);
|
||||
|
||||
_glProgramState->retain();
|
||||
}
|
||||
|
||||
NS_CC_END
|
|
@ -0,0 +1,84 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2016 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
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 CCVRGenericRenderer_hpp
|
||||
#define CCVRGenericRenderer_hpp
|
||||
|
||||
#include "vr/CCVRProtocol.h"
|
||||
#include "renderer/CCCustomCommand.h"
|
||||
#include "renderer/CCFrameBuffer.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
class Camera;
|
||||
class Sprite;
|
||||
class DistortionMesh;
|
||||
class Distortion;
|
||||
class GLProgramState;
|
||||
class VRGenericHeadTracker;
|
||||
|
||||
struct CC_DLL VREye
|
||||
{
|
||||
enum class EyeType {
|
||||
MONO,
|
||||
LEFT,
|
||||
RIGHT,
|
||||
};
|
||||
|
||||
EyeType type;
|
||||
experimental::Viewport viewport;
|
||||
};
|
||||
|
||||
class CC_DLL VRGenericRenderer : public VRIRenderer
|
||||
{
|
||||
public:
|
||||
VRGenericRenderer();
|
||||
virtual ~VRGenericRenderer();
|
||||
|
||||
virtual void setup(GLView* glview) override;
|
||||
virtual void cleanup() override;
|
||||
virtual void render(Scene* scene, Renderer* renderer) override;
|
||||
virtual VRIHeadTracker* getHeadTracker() override;
|
||||
|
||||
protected:
|
||||
void setupGLProgram();
|
||||
void renderDistortionMesh(DistortionMesh *mesh, GLint textureID);
|
||||
DistortionMesh* createDistortionMesh(VREye::EyeType eyeType);
|
||||
|
||||
experimental::FrameBuffer* _fb;
|
||||
Size _texSize;
|
||||
VREye _leftEye;
|
||||
VREye _rightEye;
|
||||
DistortionMesh* _leftDistortionMesh;
|
||||
DistortionMesh* _rightDistortionMesh;
|
||||
Distortion* _distortion;
|
||||
bool _vignetteEnabled;
|
||||
|
||||
GLProgramState* _glProgramState;
|
||||
VRGenericHeadTracker* _headTracker;
|
||||
};
|
||||
|
||||
NS_CC_END
|
||||
|
||||
#endif // CCVRGenericRenderer_hpp
|
|
@ -0,0 +1,64 @@
|
|||
/****************************************************************************
|
||||
Copyright (c) 2016 Chukong Technologies Inc.
|
||||
|
||||
http://www.cocos2d-x.org
|
||||
|
||||
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 __CC_VR_PROTOCOL_H__
|
||||
#define __CC_VR_PROTOCOL_H__
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "base/ccTypes.h"
|
||||
#include "renderer/CCTexture2D.h"
|
||||
|
||||
NS_CC_BEGIN
|
||||
|
||||
class Scene;
|
||||
class Renderer;
|
||||
class GLView;
|
||||
|
||||
class CC_DLL VRIHeadTracker
|
||||
{
|
||||
public:
|
||||
virtual ~VRIHeadTracker() {}
|
||||
|
||||
// pose
|
||||
virtual Vec3 getLocalPosition() = 0;
|
||||
// rotation
|
||||
virtual Mat4 getLocalRotation() = 0;
|
||||
};
|
||||
|
||||
class CC_DLL VRIRenderer
|
||||
{
|
||||
public:
|
||||
virtual ~VRIRenderer() {}
|
||||
|
||||
virtual void setup(GLView* glview) = 0;
|
||||
virtual void cleanup() = 0;
|
||||
virtual void render(Scene* scene, Renderer* renderer) = 0;
|
||||
virtual VRIHeadTracker* getHeadTracker() = 0;
|
||||
};
|
||||
|
||||
|
||||
NS_CC_END
|
||||
|
||||
#endif // __CC_VR_PROTOCOL_H__
|
|
@ -0,0 +1,7 @@
|
|||
|
||||
set(COCOS_VR_SRC
|
||||
vr/CCVRDistortion.cpp
|
||||
vr/CCVRDistortionMesh.cpp
|
||||
vr/CCVRGenericRenderer.cpp
|
||||
vr/CCVRGenericHeadTracker.cpp
|
||||
)
|
|
@ -573,21 +573,23 @@ void ScrollView::onBeforeDraw()
|
|||
Rect frame = getViewRect();
|
||||
auto glview = Director::getInstance()->getOpenGLView();
|
||||
|
||||
if (glview->isScissorEnabled()) {
|
||||
_scissorRestored = true;
|
||||
_parentScissorRect = glview->getScissorRect();
|
||||
//set the intersection of _parentScissorRect and frame as the new scissor rect
|
||||
if (frame.intersectsRect(_parentScissorRect)) {
|
||||
float x = MAX(frame.origin.x, _parentScissorRect.origin.x);
|
||||
float y = MAX(frame.origin.y, _parentScissorRect.origin.y);
|
||||
float xx = MIN(frame.origin.x+frame.size.width, _parentScissorRect.origin.x+_parentScissorRect.size.width);
|
||||
float yy = MIN(frame.origin.y+frame.size.height, _parentScissorRect.origin.y+_parentScissorRect.size.height);
|
||||
glview->setScissorInPoints(x, y, xx-x, yy-y);
|
||||
if (glview->getVR() == nullptr) {
|
||||
if (glview->isScissorEnabled()) {
|
||||
_scissorRestored = true;
|
||||
_parentScissorRect = glview->getScissorRect();
|
||||
//set the intersection of _parentScissorRect and frame as the new scissor rect
|
||||
if (frame.intersectsRect(_parentScissorRect)) {
|
||||
float x = MAX(frame.origin.x, _parentScissorRect.origin.x);
|
||||
float y = MAX(frame.origin.y, _parentScissorRect.origin.y);
|
||||
float xx = MIN(frame.origin.x + frame.size.width, _parentScissorRect.origin.x + _parentScissorRect.size.width);
|
||||
float yy = MIN(frame.origin.y + frame.size.height, _parentScissorRect.origin.y + _parentScissorRect.size.height);
|
||||
glview->setScissorInPoints(x, y, xx - x, yy - y);
|
||||
}
|
||||
}
|
||||
else {
|
||||
glEnable(GL_SCISSOR_TEST);
|
||||
glview->setScissorInPoints(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);
|
||||
}
|
||||
}
|
||||
else {
|
||||
glEnable(GL_SCISSOR_TEST);
|
||||
glview->setScissorInPoints(frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -607,13 +609,14 @@ void ScrollView::onAfterDraw()
|
|||
{
|
||||
if (_clippingToBounds)
|
||||
{
|
||||
if (_scissorRestored) {//restore the parent's scissor rect
|
||||
auto glview = Director::getInstance()->getOpenGLView();
|
||||
|
||||
glview->setScissorInPoints(_parentScissorRect.origin.x, _parentScissorRect.origin.y, _parentScissorRect.size.width, _parentScissorRect.size.height);
|
||||
}
|
||||
else {
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
auto glview = Director::getInstance()->getOpenGLView();
|
||||
if (glview->getVR() == nullptr) {
|
||||
if (_scissorRestored) {//restore the parent's scissor rect
|
||||
glview->setScissorInPoints(_parentScissorRect.origin.x, _parentScissorRect.origin.y, _parentScissorRect.size.width, _parentScissorRect.size.height);
|
||||
}
|
||||
else {
|
||||
glDisable(GL_SCISSOR_TEST);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -92,6 +92,10 @@ bool AppDelegate::applicationDidFinishLaunching()
|
|||
cocostudio::LocalizationHelper::setCurrentManager(lm, true);
|
||||
*/
|
||||
|
||||
// to enable VR, uncomment the following lines
|
||||
// auto vrImpl = new VRGenericRenderer;
|
||||
// glview->setVR(vrImpl);
|
||||
|
||||
// turn on display FPS
|
||||
director->setDisplayStats(true);
|
||||
|
||||
|
|
|
@ -169,7 +169,6 @@
|
|||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
@ -105,6 +105,10 @@ bool AppDelegate::applicationDidFinishLaunching()
|
|||
|
||||
_testController = TestController::getInstance();
|
||||
|
||||
// To enable built-in VR, use this line.
|
||||
// auto vrImpl = new VRGenericRenderer;
|
||||
// glview->setVR(vrImpl);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue