ha?
This commit is contained in:
parent
42b1c33c4f
commit
8d084ea457
@ -64,7 +64,7 @@ if TYPE_CHECKING:
|
|||||||
用于在必要的时候跳过 pyglet 直接在 rust 中渲染
|
用于在必要的时候跳过 pyglet 直接在 rust 中渲染
|
||||||
目前 Windows only
|
目前 Windows only
|
||||||
"""
|
"""
|
||||||
def on_draw(self) -> None:
|
def on_draw(self, clear: bool) -> None:
|
||||||
...
|
...
|
||||||
|
|
||||||
def on_resize(self, width: int, height: int) -> None:
|
def on_resize(self, width: int, height: int) -> None:
|
||||||
|
@ -9,9 +9,9 @@ pub struct WgpuRenderPy {
|
|||||||
|
|
||||||
#[pymethods]
|
#[pymethods]
|
||||||
impl WgpuRenderPy {
|
impl WgpuRenderPy {
|
||||||
pub fn on_draw(&mut self) {
|
pub fn on_draw(&mut self, clear: bool) {
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
self.app.on_draw();
|
self.app.on_draw(clear);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn on_resize(&mut self, width: u32, height: u32) {
|
pub fn on_resize(&mut self, width: u32, height: u32) {
|
||||||
|
@ -78,6 +78,10 @@ fn vs_main(
|
|||||||
|
|
||||||
@fragment
|
@fragment
|
||||||
fn fs_main(in: VertexOutput) -> @location(0) vec4f {
|
fn fs_main(in: VertexOutput) -> @location(0) vec4f {
|
||||||
|
// 如果 color 是 0.0, 0.0, 0.0, 输出透明
|
||||||
|
if (all(in.color == vec3f(0.0, 0.0, 0.0))) {
|
||||||
|
return vec4f(0.0, 0.0, 0.0, 0.0);
|
||||||
|
}
|
||||||
return vec4f(in.color, 1.0);
|
return vec4f(in.color, 1.0);
|
||||||
}
|
}
|
||||||
"#;
|
"#;
|
||||||
@ -155,7 +159,7 @@ impl WgpuContext {
|
|||||||
entry_point: Some("fs_main"),
|
entry_point: Some("fs_main"),
|
||||||
targets: &[Some(wgpu::ColorTargetState {
|
targets: &[Some(wgpu::ColorTargetState {
|
||||||
format: config.format,
|
format: config.format,
|
||||||
blend: Some(wgpu::BlendState::REPLACE),
|
blend: Some(wgpu::BlendState::ALPHA_BLENDING),
|
||||||
write_mask: wgpu::ColorWrites::ALL,
|
write_mask: wgpu::ColorWrites::ALL,
|
||||||
})],
|
})],
|
||||||
compilation_options: Default::default(),
|
compilation_options: Default::default(),
|
||||||
@ -183,30 +187,26 @@ impl WgpuContext {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let vertex_data = [
|
let vertex_data = [
|
||||||
Vertex {
|
|
||||||
position: [-0.0868241, -0.49240386, 0.0],
|
|
||||||
color: [0.5, 0.0, 0.5],
|
|
||||||
},
|
|
||||||
Vertex {
|
|
||||||
position: [0.4131759, -0.49240386, 0.0],
|
|
||||||
color: [0.5, 0.0, 0.5],
|
|
||||||
},
|
|
||||||
Vertex {
|
|
||||||
position: [0.4131759, 0.49240386, 0.0],
|
|
||||||
color: [0.5, 0.0, 0.5],
|
|
||||||
},
|
|
||||||
Vertex {
|
|
||||||
position: [-0.0868241, -0.49240386, 0.0],
|
|
||||||
color: [0.5, 0.0, 0.5],
|
|
||||||
},
|
|
||||||
Vertex {
|
|
||||||
position: [0.4131759, 0.49240386, 0.0],
|
|
||||||
color: [0.5, 0.0, 0.5],
|
|
||||||
},
|
|
||||||
Vertex {
|
Vertex {
|
||||||
position: [-0.0868241, 0.49240386, 0.0],
|
position: [-0.0868241, 0.49240386, 0.0],
|
||||||
|
color: [0.1, 0.2, 0.5],
|
||||||
|
}, // A
|
||||||
|
Vertex {
|
||||||
|
position: [-0.49513406, 0.06958647, 0.0],
|
||||||
|
color: [0.2, 0.4, 0.5],
|
||||||
|
}, // B
|
||||||
|
Vertex {
|
||||||
|
position: [-0.21918549, -0.44939706, 0.0],
|
||||||
|
color: [0.6, 0.0, 0.5],
|
||||||
|
}, // C
|
||||||
|
Vertex {
|
||||||
|
position: [0.35966998, -0.3473291, 0.0],
|
||||||
color: [0.5, 0.0, 0.5],
|
color: [0.5, 0.0, 0.5],
|
||||||
},
|
}, // D
|
||||||
|
Vertex {
|
||||||
|
position: [0.44147372, 0.2347359, 0.0],
|
||||||
|
color: [0.5, 0.0, 0.5],
|
||||||
|
}, // E
|
||||||
];
|
];
|
||||||
let mut data = Vec::new();
|
let mut data = Vec::new();
|
||||||
for vertex in vertex_data.iter() {
|
for vertex in vertex_data.iter() {
|
||||||
@ -219,7 +219,7 @@ impl WgpuContext {
|
|||||||
usage: wgpu::BufferUsages::VERTEX,
|
usage: wgpu::BufferUsages::VERTEX,
|
||||||
});
|
});
|
||||||
|
|
||||||
let index_data = [0u16, 1, 2, 3, 4, 5];
|
let index_data = [0, 1, 4, 1, 2, 4, 2, 3, 4_u16];
|
||||||
let index_buffer = {
|
let index_buffer = {
|
||||||
let mut data = Vec::with_capacity(index_data.len() * std::mem::size_of::<u16>());
|
let mut data = Vec::with_capacity(index_data.len() * std::mem::size_of::<u16>());
|
||||||
for index in index_data.iter() {
|
for index in index_data.iter() {
|
||||||
@ -253,7 +253,7 @@ impl WgpuContext {
|
|||||||
self.surface.configure(&self.device, &self.config);
|
self.surface.configure(&self.device, &self.config);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn inner_on_draw(&mut self) -> anyhow::Result<()> {
|
fn inner_on_draw(&self) -> anyhow::Result<()> {
|
||||||
let output = self.surface.get_current_texture()?;
|
let output = self.surface.get_current_texture()?;
|
||||||
let view = output.texture.create_view(&wgpu::TextureViewDescriptor::default());
|
let view = output.texture.create_view(&wgpu::TextureViewDescriptor::default());
|
||||||
let mut encoder = self.device.create_command_encoder(&wgpu::CommandEncoderDescriptor {
|
let mut encoder = self.device.create_command_encoder(&wgpu::CommandEncoderDescriptor {
|
||||||
@ -266,13 +266,8 @@ impl WgpuContext {
|
|||||||
view: &view,
|
view: &view,
|
||||||
resolve_target: None,
|
resolve_target: None,
|
||||||
ops: wgpu::Operations {
|
ops: wgpu::Operations {
|
||||||
load: wgpu::LoadOp::Clear(wgpu::Color {
|
load: wgpu::LoadOp::Load,
|
||||||
r: 0.0,
|
store: wgpu::StoreOp::Discard,
|
||||||
g: 0.0,
|
|
||||||
b: 0.0,
|
|
||||||
a: 0.0,
|
|
||||||
}),
|
|
||||||
store: wgpu::StoreOp::Store,
|
|
||||||
},
|
},
|
||||||
})],
|
})],
|
||||||
..Default::default()
|
..Default::default()
|
||||||
@ -289,11 +284,44 @@ impl WgpuContext {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn on_draw(&mut self) {
|
fn inner_clear_draw(&self) -> anyhow::Result<()> {
|
||||||
match self.inner_on_draw() {
|
let output = self.surface.get_current_texture()?;
|
||||||
Ok(_) => {}
|
let mut encoder = self.device.create_command_encoder(&wgpu::CommandEncoderDescriptor {
|
||||||
Err(e) => {
|
label: Some("Clear Encoder"),
|
||||||
println!("Failed to draw: {:?}", e);
|
});
|
||||||
|
let view = output.texture.create_view(&wgpu::TextureViewDescriptor::default());
|
||||||
|
{
|
||||||
|
let mut _render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
|
||||||
|
label: Some("Render Pass"),
|
||||||
|
color_attachments: &[Some(wgpu::RenderPassColorAttachment {
|
||||||
|
view: &view,
|
||||||
|
resolve_target: None,
|
||||||
|
ops: wgpu::Operations {
|
||||||
|
load: wgpu::LoadOp::Clear(wgpu::Color::TRANSPARENT),
|
||||||
|
store: wgpu::StoreOp::Discard,
|
||||||
|
},
|
||||||
|
})],
|
||||||
|
..Default::default()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
self.queue.submit(std::iter::once(encoder.finish()));
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn on_draw(&mut self, clear: bool) {
|
||||||
|
if clear {
|
||||||
|
match self.inner_clear_draw() {
|
||||||
|
Ok(_) => {}
|
||||||
|
Err(e) => {
|
||||||
|
println!("Failed to clear: {:?}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
match self.inner_on_draw() {
|
||||||
|
Ok(_) => {}
|
||||||
|
Err(e) => {
|
||||||
|
println!("Failed to draw: {:?}", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ class Menu(BaseScreen):
|
|||||||
def __init__(self, main_window: ClientWindow):
|
def __init__(self, main_window: ClientWindow):
|
||||||
super().__init__(main_window)
|
super().__init__(main_window)
|
||||||
self.hacks = None
|
self.hacks = None
|
||||||
|
self.enable_hacks = True
|
||||||
self.main_batch = Batch()
|
self.main_batch = Batch()
|
||||||
self.main_group = Group(parent=main_window.main_group, order=1)
|
self.main_group = Group(parent=main_window.main_group, order=1)
|
||||||
|
|
||||||
@ -93,7 +94,12 @@ class Menu(BaseScreen):
|
|||||||
if self.hacks is not None:
|
if self.hacks is not None:
|
||||||
self.hacks.on_resize(width, height)
|
self.hacks.on_resize(width, height)
|
||||||
|
|
||||||
|
def on_mouse_press(self, x, y, button, modifiers, window):
|
||||||
|
if button == 1:
|
||||||
|
self.enable_hacks = not self.enable_hacks
|
||||||
|
logger.info(f"enable_hacks: {self.enable_hacks}", tag="dr_game_hacks")
|
||||||
|
|
||||||
def on_draw(self, window: ClientWindow):
|
def on_draw(self, window: ClientWindow):
|
||||||
self.main_batch.draw()
|
self.main_batch.draw()
|
||||||
if self.hacks is not None:
|
if self.hacks is not None:
|
||||||
self.hacks.on_draw()
|
self.hacks.on_draw(not self.enable_hacks)
|
||||||
|
Loading…
Reference in New Issue
Block a user