Skip to content

Commit

Permalink
Merge branch 'v3.8.2' of github.com:cocos/cocos-engine into v3.8.2-as…
Browse files Browse the repository at this point in the history
…set-location-0920
  • Loading branch information
arsen2010 committed Sep 21, 2023
2 parents 6bc6729 + 2a44a31 commit 0d2d3a4
Show file tree
Hide file tree
Showing 9 changed files with 70 additions and 77 deletions.
1 change: 1 addition & 0 deletions cocos/render-scene/scene/submodel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,7 @@ export class SubModel {
* @zh 管线更新回调
*/
public onPipelineStateChanged (): void {

const passes = this._passes;
if (!passes) { return; }

Expand Down
41 changes: 22 additions & 19 deletions cocos/rendering/pipeline-ubo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ import { builtinResMgr } from '../asset/asset-manager/builtin-res-mgr';
import { Texture2D } from '../asset/assets';
import { DebugViewCompositeType } from './debug-view';
import { getDescBindingFromName } from './custom/define';
import { Root } from '../root';

const _matShadowView = new Mat4();
const _matShadowProj = new Mat4();
Expand All @@ -47,7 +48,7 @@ const _tempVec3 = new Vec3();
export class PipelineUBO {
public static updateGlobalUBOView (window: RenderWindow, bufferView: Float32Array): void {
const director = cclegacy.director;
const root = director.root;
const root = director.root as Root;
const fv = bufferView;

const shadingWidth = Math.floor(window.width);
Expand Down Expand Up @@ -75,19 +76,21 @@ export class PipelineUBO {
}

const debugView = root.debugView;
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET] = debugView.singleMode as number;

for (let i = 1; i <= 3; i++) {
for (let i = 0; i <= 3; i++) {
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + i] = 0.0;
}
for (let i = DebugViewCompositeType.DIRECT_DIFFUSE as number; i < DebugViewCompositeType.MAX_BIT_COUNT; i++) {
const offset = i >> 3;
const bit = i % 8;
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 1 + offset] += (debugView.isCompositeModeEnabled(i) ? 1.0 : 0.0) * (10.0 ** bit);
}
if (debugView.isEnabled()) {
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET] = debugView.singleMode as number;

for (let i = DebugViewCompositeType.DIRECT_DIFFUSE as number; i < (DebugViewCompositeType.MAX_BIT_COUNT as unknown as number); i++) {
const offset = i >> 3;
const bit = i % 8;
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 1 + offset] += (debugView.isCompositeModeEnabled(i) ? 1.0 : 0.0) * (10.0 ** bit);
}

fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 3] += (debugView.lightingWithAlbedo ? 1.0 : 0.0) * (10.0 ** 6.0);
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 3] += (debugView.csmLayerColoration ? 1.0 : 0.0) * (10.0 ** 7.0);
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 3] += (debugView.lightingWithAlbedo ? 1.0 : 0.0) * (10.0 ** 6.0);
fv[UBOGlobal.DEBUG_VIEW_MODE_OFFSET + 3] += (debugView.csmLayerColoration ? 1.0 : 0.0) * (10.0 ** 7.0);
}
}

public static updateCameraUBOView (
Expand All @@ -96,7 +99,7 @@ export class PipelineUBO {
camera: Camera,
): void {
const scene = camera.scene ? camera.scene : cclegacy.director.getScene().renderScene;
const mainLight = scene.mainLight;
const mainLight = scene.mainLight as DirectionalLight;
const sceneData = pipeline.pipelineSceneData;
const ambient = sceneData.ambient;
const skybox = sceneData.skybox;
Expand Down Expand Up @@ -339,9 +342,9 @@ export class PipelineUBO {
if (shadowInfo.type === ShadowType.ShadowMap) {
let near = 0.1;
let far = 0;
let matShadowView;
let matShadowProj;
let matShadowViewProj;
let matShadowView: Mat4;
let matShadowProj: Mat4;
let matShadowViewProj: Mat4;
let levelCount = 0;
if (mainLight.shadowFixedArea || mainLight.csmLevel === CSMLevel.LEVEL_1 || !csmSupported) {
matShadowView = csmLayers.specialLayer.matShadowView;
Expand Down Expand Up @@ -403,10 +406,10 @@ export class PipelineUBO {

Mat4.perspective(
_matShadowProj,
(light as any).angle,
spotLight.angle,
1.0,
0.001,
(light as any).range,
spotLight.range,
true,
cap.clipSpaceMinZ,
cap.clipSpaceSignY,
Expand Down Expand Up @@ -564,6 +567,6 @@ export class PipelineUBO {
}
}

public destroy (): void {
}
// eslint-disable-next-line @typescript-eslint/no-empty-function
public destroy (): void {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ CCEffect %{
emissiveMap: { value: grey, editor: { displayName: EmissiveColorMap } }
alphaSource: { value: 1.0, editor: { slide: true, range: [0, 1.0], step: 0.001 } }
alphaSourceMap: { value: grey, editor: { parent: USE_OPACITY_MAP } }
alphaThreshold: { value: 0.5, target: albedoScaleAndCutoff.w, editor: { parent: USE_ALPHA_TEST, slide: true, range: [0, 1.0], step: 0.001 } }
alphaThreshold: { value: 0.5, editor: { parent: USE_ALPHA_TEST, slide: true, range: [0, 1.0], step: 0.001 } }
normalStrength: { value: 1.0, editor: { parent: USE_NORMAL_MAP, slide: true, range: [0, 1.0], step: 0.001 } }
normalMap: { value: normal }
- &forward-add
Expand Down Expand Up @@ -55,8 +55,8 @@ CCEffect %{
properties:
tilingOffset: { value: [1.0, 1.0, 0.0, 0.0] }
mainColor: { value: [1.0, 1.0, 1.0, 1.0], target: albedo, editor: { displayName: Albedo, type: color } }
albedoScale: { value: [1.0, 1.0, 1.0], target: albedoScaleAndCutoff.xyz }
alphaThreshold: { value: 0.5, target: albedoScaleAndCutoff.w, editor: { parent: USE_ALPHA_TEST } }
albedoScale: { value: 1.0, editor: { displayName: BaseWeight } }
alphaThreshold: { value: 0.5, editor: { parent: USE_ALPHA_TEST } }
mainTexture: { value: grey, target: albedoMap, editor: { displayName: AlbedoMap } }
alphaSource: { value: 1.0, editor: { slide: true, range: [0, 1.0], step: 0.001 } }
alphaSourceMap: { value: grey, editor: { parent: USE_OPACITY_MAP } }
Expand Down Expand Up @@ -96,7 +96,6 @@ CCProgram shared-ubos %{
uniform Constants {
vec4 tilingOffset;
vec4 albedo;
vec4 albedoScaleAndCutoff;
vec4 emissive;
float emissiveScale;
float occlusion;
Expand All @@ -105,6 +104,7 @@ CCProgram shared-ubos %{
float normalStrength;
float alphaSource;
float albedoScale;
float alphaThreshold;
float specularIntensity;
};
}%
Expand Down Expand Up @@ -237,7 +237,7 @@ CCProgram surface-fragment %{
#endif
#endif
#if USE_ALPHA_TEST
if (baseColor.a < albedoScaleAndCutoff.w) discard;
if (baseColor.a < alphaThreshold) discard;
#endif
return baseColor;
}
Expand Down Expand Up @@ -265,7 +265,7 @@ CCProgram surface-fragment %{
#endif
#endif

if (alpha < albedoScaleAndCutoff.w) discard;
if (alpha < alphaThreshold) discard;
#endif
}

Expand Down
2 changes: 1 addition & 1 deletion native/cocos/platform/mac/View.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
#import <MetalKit/MetalKit.h>

@interface View : NSView <CALayerDelegate>

- (int)getWindowId;
@property (nonatomic, assign) id<MTLDevice> device;

@end
16 changes: 16 additions & 0 deletions native/cocos/platform/mac/View.mm
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,20 @@ of this software and associated engine source code (the "Software"), a limited,
#import "platform/mac/modules/SystemWindow.h"
#import "platform/mac/modules/SystemWindowManager.h"

#include "SDL2/SDL.h"

static int MetalViewEventWatch(void* userData, SDL_Event*event) {
if (event->type == SDL_WINDOWEVENT && event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
@autoreleasepool {
auto *view = (__bridge View *)userData;
if ([view getWindowId] == event->window.windowID) {
[view viewDidChangeBackingProperties];
}
}
}
return 0;
}

@implementation View {
cc::MouseEvent _mouseEvent;
cc::KeyboardEvent _keyboardEvent;
Expand All @@ -50,6 +64,8 @@ - (CALayer *)makeBackingLayer {

- (instancetype)initWithFrame:(NSRect)frameRect {
if (self = [super initWithFrame:frameRect]) {
// View is used as a subview, so the resize message needs to be handled manually.
SDL_AddEventWatch(MetalViewEventWatch, (__bridge void*)(self));
[self.window makeFirstResponder:self];
int pixelRatio = [[NSScreen mainScreen] backingScaleFactor];
CGSize size = CGSizeMake(frameRect.size.width * pixelRatio, frameRect.size.height * pixelRatio);
Expand Down
6 changes: 3 additions & 3 deletions native/cocos/platform/mac/modules/Screen.mm
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ of this software and associated engine source code (the "Software"), a limited,
#include "base/Macros.h"
#include "cocos/bindings/jswrapper/SeApi.h"
#include "platform/interfaces/modules/ISystemWindowManager.h"
#include "platform/interfaces/modules/ISystemWindow.h"
#include "platform/mac/modules/SystemWindow.h"
#include "application/ApplicationManager.h"
namespace cc {

Expand All @@ -52,8 +52,8 @@ of this software and associated engine source code (the "Software"), a limited,
global->getProperty("devicePixelRatio", &devicePixelRatioVal);
return devicePixelRatioVal.isNumber() ? devicePixelRatioVal.toFloat() : 1.F;
#else
auto* window = CC_GET_MAIN_SYSTEM_WINDOW();
NSWindow* nsWindow = reinterpret_cast<NSWindow*>(window->getWindowHandle()) ;
auto* systemWindow = static_cast<SystemWindow*>(CC_GET_MAIN_SYSTEM_WINDOW());
auto* nsWindow = systemWindow->getNSWindow();
return [nsWindow backingScaleFactor];
#endif
}
Expand Down
8 changes: 4 additions & 4 deletions native/cocos/platform/mac/modules/SystemWindow.mm
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ of this software and associated documentation files (the "Software"), to deal

#include "platform/mac/modules/SystemWindow.h"
#include "platform/mac/View.h"

#include "base/Log.h"
#include "base/Macros.h"

Expand Down Expand Up @@ -57,16 +58,15 @@ of this software and associated documentation files (the "Software"), to deal
void SystemWindow::initWindowProperty(SDL_Window* window, const char *title, int x, int y, int w, int h) {
CC_ASSERT(window != nullptr);
auto* nsWindow = reinterpret_cast<NSWindow*>(SDLHelper::getWindowHandle(window));
NSRect rect = NSMakeRect(x, y, w, h);
NSString *astring = [NSString stringWithUTF8String:title];
nsWindow.title = astring;
// contentView is created internally by sdl.
NSView *view = nsWindow.contentView;
auto* newView = [[View alloc] initWithFrame:rect];
auto* newView = [[View alloc] initWithFrame:view.frame];
[view addSubview:newView];
[nsWindow.contentView setWantsBestResolutionOpenGLSurface:YES];
[nsWindow makeKeyAndOrderFront:nil];

_windowHandle = reinterpret_cast<uintptr_t>(nsWindow.contentView) ;
_windowHandle = reinterpret_cast<uintptr_t>(newView);

auto dpr = [nsWindow backingScaleFactor];
_width = w * dpr;
Expand Down
7 changes: 0 additions & 7 deletions native/cocos/renderer/gfx-metal/MTLSwapchain.mm
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,6 @@ of this software and associated engine source code (the "Software"), a limited,
if (!layer.device) {
layer.device = MTLCreateSystemDefaultDevice();
}
#elif CC_PLATFORM == CC_PLATFORM_MACOS
CAMetalLayer *layer = nullptr;
auto *view = (CCView *)info.windowHandle;
if(view && view.subviews.count > 0) {
NSView* subView = view.subviews[0];
layer = static_cast<CAMetalLayer *>(subView.layer);
}
#else
auto *view = (CCView *)info.windowHandle;
CAMetalLayer *layer = static_cast<CAMetalLayer *>(view.layer);
Expand Down
54 changes: 17 additions & 37 deletions native/cocos/renderer/pipeline/custom/NativeBuiltinUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@ namespace cc {
namespace render {

void setupQuadVertexBuffer(gfx::Device &device, const Vec4 &viewport, float vbData[16]) {
auto minX = static_cast<float>(viewport.x);
auto maxX = static_cast<float>(viewport.x + viewport.z);
auto minY = static_cast<float>(viewport.y);
auto maxY = static_cast<float>(viewport.y + viewport.w);
const float minX = viewport.x;
const float maxX = viewport.x + viewport.z;
float minY = viewport.y;
float maxY = viewport.y + viewport.w;
if (device.getCapabilities().screenSpaceSignY > 0) {
std::swap(minY, maxY);
}
Expand Down Expand Up @@ -87,43 +87,23 @@ void updateRasterPassConstants(uint32_t width, uint32_t height, Setter &setter)
setter.setVec4(
"cc_nativeSize",
Vec4(shadingWidth, shadingHeight, 1.0F / shadingWidth, 1.0F / shadingHeight));
#if 0

const auto *debugView = root.getDebugView();
if (debugView) {
setter.setVec4(
"cc_debug_view_mode",
Vec4(static_cast<float>(debugView->getSingleMode()),
debugView->isLightingWithAlbedo() ? 1.0F : 0.0F,
debugView->isCsmLayerColoration() ? 1.0F : 0.0F,
0.0F));
Vec4 debugPackVec{};
for (auto i = static_cast<uint32_t>(pipeline::DebugViewCompositeType::DIRECT_DIFFUSE);
i < static_cast<uint32_t>(pipeline::DebugViewCompositeType::MAX_BIT_COUNT); ++i) {
const auto idx = i % 4;
(&debugPackVec.x)[idx] = debugView->isCompositeModeEnabled(i) ? 1.0F : 0.0F;
const auto packIdx = static_cast<uint32_t>(floor(static_cast<float>(i) / 4.0F));
if (idx == 3) {
std::string name("cc_debug_view_composite_pack_");
name.append(std::to_string(packIdx + 1));
setter.setVec4(name, debugPackVec);
}
}
} else {
setter.setVec4("cc_debug_view_mode", Vec4(0.0F, 1.0F, 0.0F, 0.0F));
Vec4 debugPackVec{};
float debugViewData[4] = {0.0F, 0.0F, 0.0F, 0.0F};
if (debugView && debugView->isEnabled()) {
debugViewData[0] = static_cast<float>(debugView->getSingleMode());
for (auto i = static_cast<uint32_t>(pipeline::DebugViewCompositeType::DIRECT_DIFFUSE);
i < static_cast<uint32_t>(pipeline::DebugViewCompositeType::MAX_BIT_COUNT); ++i) {
const auto idx = i % 4;
(&debugPackVec.x)[idx] = 1.0F;
const auto packIdx = static_cast<uint32_t>(floor(i / 4.0));
if (idx == 3) {
std::string name("cc_debug_view_composite_pack_");
name.append(std::to_string(packIdx + 1));
setter.setVec4(name, debugPackVec);
}
const uint32_t offset = i >> 3;
const uint32_t bit = i % 8;
debugViewData[1 + offset] += (debugView->isCompositeModeEnabled(i) ? 1.0F : 0.0F) * powf(10.0F, static_cast<float>(bit));
}
debugViewData[3] += (debugView->isLightingWithAlbedo() ? 1.0F : 0.0F) * powf(10.0F, static_cast<float>(6));
debugViewData[3] += (debugView->isCsmLayerColoration() ? 1.0F : 0.0F) * powf(10.0F, static_cast<float>(7));
}
#endif
setter.setVec4(
"cc_debug_view_mode",
Vec4(debugViewData[0], debugViewData[1], debugViewData[2], debugViewData[3]));
}

namespace {
Expand Down Expand Up @@ -373,7 +353,7 @@ void setShadowUBOView(
}
}
} else {
Vec3 tempVec3 = shadowInfo.getNormal().getNormalized();
const Vec3 tempVec3 = shadowInfo.getNormal().getNormalized();
setVec4Impl(data, layoutGraph,
"cc_planarNDInfo",
Vec4(tempVec3.x, tempVec3.y, tempVec3.z, -shadowInfo.getDistance()));
Expand Down

0 comments on commit 0d2d3a4

Please sign in to comment.