DXRuby1.1.10dev
http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D5%A5%A1%A5%A4%A5%EB%C3%D6%A4%AD%BE%EC
disposeメソッドの実装、DXRUBY_RENDERTARGET定数の廃止、Shaderのパラメータを切り替えながら複数描画、フルスクリーン切り替え関連の不具合修正。
一つのShaderでパラメータを切り替えて描画できるから、こんな感じのことがShaderオブジェクト一つでできる。
そんな当たり前のことが今までできなかったわけだが、その当たり前のものを実装するには意外に手間がかかる。
世の中、プログラミングに関してはどんどん進歩していき、環境側、言語、ライブラリなどもよくなっていくが、そういうサポートが無い領域の「当たり前」は基本的には開発者の努力に依存する。
当たり前のことを当たり前にできるようにするには、細かいところまで考えた地道な改良が必要だ。
それはたぶんゲームの開発なんかにも通じるものがあるんじゃないかと思う。
require 'dxruby' hlsl = <<EOS float4 g_blend; float4 g_tone; texture Tex0; sampler Samp = sampler_state { Texture =<Tex0>; }; struct PixelIn { float2 UV : TEXCOORD0; }; struct PixelOut { float4 Color : COLOR0; }; PixelOut PS(PixelIn input) { PixelOut output; float3 temp; float3 ntsc = {0.298912, 0.586611, 0.114478}; float ntscy; output.Color = tex2D( Samp, input.UV ); ntsc = ntsc * output.Color.rgb; ntscy = ntsc.r + ntsc.g + ntsc.b; temp.rgb = output.Color.rgb + ((ntscy - output.Color.rgb) * g_tone.a); output.Color.rgb = min(1, temp + g_tone.rgb) * (1.0 - g_blend.a) + g_blend.rgb * g_blend.a; return output; } technique TShader { pass P0 { PixelShader = compile ps_2_0 PS(); } } EOS shader = Shader.new(hlsl, "TShader") shader.setValue("g_tone", Vector.new(0,0,0,0)) image =Image.new(100,100,[0,255,0]) Window.loop do for i in 0..5 shader.setValue("g_tone", Vector.new(0,0,0,0.2 * i)) Window.drawShader(i*100, 0, image, shader) end end