void cWaterUberShader::defaultValue() { m_textureScale = sVector2(8.0f, 4.0f); m_waveFreq = 0.0065f; m_waveAmp = 8.0f; m_bumpScale = 0.15f; m_bumpSpeed = sVector2(-0.1f, 0.0f); m_deepColor = sVector4(0.0f, 0.0f, 0.1f, 1.0f); m_shallowColor = sVector4(0.0f, 0.3f, 0.4f, 1.0f); m_waterAmount = 0.3f; m_reflectionColor = sVector4(1.0f, 1.0f, 1.0f, 1.0f); m_reflectionAmount = 1.0f; m_reflectionBlur = 0.0f; m_fresnelPower = 4.0f; m_fresnelBias = 0.2f; m_hdrMultiplier = 3.0f; }
void App::OnPaint() { sInt time = sGetTimeMS(); sTargetPara tp(sTAR_ClearAll,0xff405060,Screen); sViewport view; Context->BeginTarget(tp); view.Mode = sVM_Pixels; view.Prepare(tp); cbv0->Map(); cbv0->Data->Set(view); cbv0->Unmap(); // draw sInt vc = 0; Vertex *vp; Geo->VB(0)->MapBuffer(&vp,sRMM_Discard); for(auto &cl : Clicks) { sF32 f = 1.0f-(time-cl.Time)*0.002f; sF32 s = 50.0f*(1-f); sF32 x = sF32(cl.ScreenX); sF32 y = sF32(cl.ScreenY); if(vc+3<=MaxVertex && f>0) { if(!cl.Make) s *= -1; sU32 col = cl.Color; col += (sU32(f*255)<<24); vp[vc+0].Init(x-s,y-s*0.5f,0.5f,col); vp[vc+1].Init(x+s,y-s*0.5f,0.5f,col); vp[vc+2].Init(x ,y+s ,0.5f,col); vc += 3; } else { cl.Color = 0; } } if(DragActive) { sU32 col = 0xffffffff; sFRect r; r.Init(sF32(StartX),sF32(StartY),sF32(EndX),sF32(EndY)); sVector2 tn = sNormalize(sVector2(r.SizeY(),-r.SizeX())); vp[vc+0].Init(r.x0+tn.x,r.y0+tn.y,0.5f,col); // 00 vp[vc+1].Init(r.x0-tn.x,r.y0-tn.y,0.5f,col); // 01 vp[vc+2].Init(r.x1-tn.x,r.y1-tn.y,0.5f,col); // 11 vp[vc+3].Init(r.x0+tn.x,r.y0+tn.y,0.5f,col); // 00 vp[vc+4].Init(r.x1-tn.x,r.y1-tn.y,0.5f,col); // 11 vp[vc+5].Init(r.x1+tn.x,r.y1+tn.y,0.5f,col); // 10 vc+=6; } Geo->VB(0)->Unmap(); if(vc>0) { sDrawPara dp(Geo,Mtrl,cbv0); sDrawRange dr; dr.Start = 0; dr.End = vc; dp.Flags |= sDF_Ranges; dp.RangeCount = 1; dp.Ranges = &dr; Context->Draw(dp); } // remove unused clicks sInt max = Clicks.GetCount(); for(sInt i=0; i<max;) { if(Clicks[i].Color == 0) Clicks[i] = Clicks[--max]; else i++; } Clicks.SetSize(max); // debug DPaint->PrintFPS(); DPaint->PrintStats(); DPaint->Draw(tp); Context->EndTarget(); }
void MyWindow::OnPaint2D() { //sRect2D(Client,sGC_BACK); //sLine2D(Client.x0,Client.y0,Client.x1-1,Client.y1-1,sGC_DRAW); //sLine2D(Client.x0,Client.y1-1,Client.x1-1,Client.y0,sGC_DRAW); sF32 width = 1.5f; sInt sx = Client.SizeX(); sInt sy = Client.SizeY(); sImage img(sx,sy); sVectorRasterizer raster(&img); img.Fill(sGetColor2D(sGC_BACK)); // thick line 1 raster.MoveTo(sVector2(0,0)); raster.EdgeTo(sVector2(width,0)); raster.EdgeTo(sVector2(sx,sy-width)); raster.EdgeTo(sVector2(sx,sy)); raster.EdgeTo(sVector2(sx-width,sy)); raster.EdgeTo(sVector2(0,width)); raster.EdgeTo(sVector2(0,0)); // thick line 2 raster.MoveTo(sVector2(sx,0)); raster.EdgeTo(sVector2(sx,width)); raster.EdgeTo(sVector2(width,sy)); raster.EdgeTo(sVector2(0,sy)); raster.EdgeTo(sVector2(0,sy-width)); raster.EdgeTo(sVector2(sx-width,0)); raster.EdgeTo(sVector2(sx,0)); raster.RasterizeAll(sGetColor2D(sGC_DRAW),sVRFC_NONZERO_WINDING); sBlit2D(img.Data,img.SizeX,Client); }