|
@@ -45,14 +45,15 @@ interface Renderer {
|
|
|
|
|
|
export const DefaultRendererProps = {
|
|
|
clearColor: Color(0x000000),
|
|
|
- viewport: Viewport.create(0, 0, 0, 0)
|
|
|
+ viewport: Viewport.create(0, 0, 0, 0),
|
|
|
+ pickingAlphaThreshold: 0.5,
|
|
|
}
|
|
|
export type RendererProps = typeof DefaultRendererProps
|
|
|
|
|
|
namespace Renderer {
|
|
|
export function create(ctx: WebGLContext, camera: Camera, props: Partial<RendererProps> = {}): Renderer {
|
|
|
const { gl } = ctx
|
|
|
- let { clearColor, viewport: _viewport } = { ...DefaultRendererProps, ...props }
|
|
|
+ let { clearColor, viewport: _viewport, pickingAlphaThreshold } = { ...DefaultRendererProps, ...props }
|
|
|
|
|
|
const viewport = Viewport.clone(_viewport)
|
|
|
const viewportVec4 = Viewport.toVec4(Vec4.zero(), viewport)
|
|
@@ -98,12 +99,14 @@ namespace Renderer {
|
|
|
uFogNear: ValueCell.create(camera.state.near),
|
|
|
uFogFar: ValueCell.create(camera.state.far / 50),
|
|
|
uFogColor: ValueCell.create(Vec3.clone(fogColor)),
|
|
|
+
|
|
|
+ uPickingAlphaThreshold: ValueCell.create(pickingAlphaThreshold),
|
|
|
}
|
|
|
|
|
|
let currentProgramId = -1
|
|
|
const renderObject = (r: Renderable<RenderableValues & BaseValues>, variant: RenderVariant) => {
|
|
|
const program = r.getProgram(variant)
|
|
|
- if (r.state.visible && (variant === 'draw' || r.state.pickable)) {
|
|
|
+ if (r.state.visible) {
|
|
|
if (currentProgramId !== program.id) {
|
|
|
program.use()
|
|
|
program.setUniforms(globalUniforms)
|
|
@@ -192,6 +195,7 @@ namespace Renderer {
|
|
|
get props() {
|
|
|
return {
|
|
|
clearColor,
|
|
|
+ pickingAlphaThreshold,
|
|
|
viewport
|
|
|
}
|
|
|
},
|