#! ruby # -*- mode: ruby; coding: utf-8 -*- # Last updated: <2019/04/15 18:13:04 +0900> # # RenderTarget に画像を描画してからshaderに渡す事例 # DXRuby のバージョンによっては、 # RenderTarget#update を呼ぶと描画されなくなる場合もある。 require 'dxruby' hlsl = <; }; float4 PS(float2 input : TEXCOORD0) : COLOR0 { float4 output; // input.y = input.y / 2.0; output = tex2D( Samp0, input ); return output; } technique HelloShader { pass P0 { PixelShader = compile ps_2_0 PS(); } } EOS core = Shader::Core.new(hlsl) shader = Shader.new(core, "HelloShader") img = Image.new(128, 128) v = 0 img.height.times do |y| img.width.times do |x| img[x, y] = [255, 0, (v>>8) & 0x0ff, v & 0x0ff] v += 2 v = 0 if v > 0x0ffff end end imgs = [img] rt = RenderTarget.new(640, 480) Window.loop do break if Input.keyPush?(K_ESCAPE) rt.draw_tile(0, 0, [[0]], imgs, 0, 0, 3, 2) rt.update x, y = 0, 0 Window.draw_shader(x, y, rt, shader) end