//TODO:GraphicsContextにAppScreenを保持できればよいが。 public SpriteBuffer2(GraphicsContext graphics,int maxNumOfSprite, Vector2 screenScale, ImageRect rectAppScreen) { this.m_graphics = graphics; this.screenScale=screenScale; this.rectAppScreen=rectAppScreen; if(shaderProgram == null) { shaderProgram=CreateSpriteBShader(); } m_maxNumOfSprite=maxNumOfSprite; #if true bufferVerties = new float[m_maxNumOfSprite * FNUM_VERTEX_PER_SPRITE]; //0 bufferTexcoords = new float[m_maxNumOfSprite * FNUM_TEXCOORD_PER_SPRITE]; //1 bufferColors = new float[m_maxNumOfSprite * FNUM_COLOR_PER_SPRITE]; //2 bufferWH = new float[m_maxNumOfSprite * FNUM_WH_PER_SPRITE]; //3 bufferCenter = new float[m_maxNumOfSprite * FNUM_CENTER_PER_SPRITE]; //4 bufferRot = new float[m_maxNumOfSprite * FNUM_ROT_PER_SPRITE]; //5 bufferSpritePosition=new float[m_maxNumOfSprite * FNUM_SPOSITION_PER_SPRITE];//6 bufferIndices = new ushort[m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE]; // vertexBuffer = new VertexBuffer( m_maxNumOfSprite * VERTEX_NUM_PER_SPRITE, m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE, VertexFormat.Float3,//0 VertexFormat.Float2,//1 VertexFormat.Float4,//2 VertexFormat.Float2,//3 VertexFormat.Float2,//4 VertexFormat.Float2,//5 VertexFormat.Float3//6 ); #else //正しい。 bufferVerties = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 3]; //0 bufferTexcoords = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 2]; //1 bufferColors = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 4]; //2 bufferIndices = new ushort[m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE]; // vertexBuffer = new VertexBuffer( m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE, m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE, VertexFormat.Float3, VertexFormat.Float2, VertexFormat.Float4); #endif }
public override void Initialize() { base.Initialize(); rectScreen = graphics.Screen.Rectangle; Texture2D texturePlayer = new Texture2D("/Application/resources/Player.png", false); spritePlayer = new SimpleSprite(graphics, texturePlayer); spritePlayer.Position.X = rectScreen.Width/2.0f; spritePlayer.Position.Y = rectScreen.Height/2.0f; spritePlayer.Position.Z = 0.0f; }
public void TryCacheSpriteSheetImage(string id, string uri, ImageRect rect, Action <EnhancedImageInfo> Finally = null, int forcedHeight = -1) { if (_cachedImageInfo.TryGetValue(id, out var info)) { Finally?.Invoke(info); return; } if (_cachedSpriteSheets.TryGetValue(uri, out var tex)) { CacheSpriteSheetImage(id, rect, tex, Finally, forcedHeight); } else { StartCoroutine(ChatImageProvider.instance.DownloadContent(uri, (bytes) => { Logger.log.Info($"Finished download content for emote {id}!"); var tex = GraphicUtils.LoadTextureRaw(bytes); _cachedSpriteSheets[uri] = tex; CacheSpriteSheetImage(id, rect, tex, Finally, forcedHeight); })); } }
/// <summary> /// Try to cache sprite sheet /// </summary> /// <param name="p_ID">ID of the sprite sheet</param> /// <param name="p_URI">The resource location</param> /// <param name="p_Rect">Sheet rect</param> /// <param name="p_Finally">A callback that occurs after the resource is retrieved. This will always occur even if the resource is already cached.</param> /// <param name="p_ForcedHeight">Forced height</param> /// <returns></returns> public void TryCacheSpriteSheetImage(string p_ID, string p_URI, ImageRect p_Rect, Action <EnhancedImageInfo> p_Finally = null, int p_ForcedHeight = -1) { if (m_CachedImageInfo.TryGetValue(p_ID, out var info)) { p_Finally?.Invoke(info); return; } if (m_CachedSpriteSheets.TryGetValue(p_URI, out var l_Texture)) { CacheSpriteSheetImage(p_ID, l_Texture, p_Rect, p_Finally, p_ForcedHeight); } else { StartCoroutine(ChatImageProvider.instance.DownloadContent(p_URI, (p_Bytes) => { //Logger.Instance.Info($"Finished download content for emote {p_ID}!"); l_Texture = BeatSaberPlus.Utils.UnityTexture.LoadTextureRaw(p_Bytes); m_CachedSpriteSheets[p_URI] = l_Texture; CacheSpriteSheetImage(p_ID, l_Texture, p_Rect, p_Finally, p_ForcedHeight); })); } }
public Map(string filePath) { this.filePath = filePath; random = new Random(); tileLocations = new Dictionary <MapTile.Types, Vector2i>(); setupLocations(); tiles = new List <MapTile> (); wallTiles = new List <MapTile> (); ParseFile(this, filePath, tiles); tiles.Reverse(); prepareDescriptions(this, tiles); spriteList = prepareTiles(this, tiles); Console.WriteLine("map: " + filePath); Console.WriteLine("width: " + width); Console.WriteLine("heigh: " + height); //prepare thumbnail //create new scene for the thumbnail ThumbnailScene ts = new ThumbnailScene(); //set up the camera so the entire level is visible ts.Camera2D.SetViewFromWidthAndCenter(FMath.Max(width, height), new Vector2(width / 2.0f, height / 2.0f)); //create a new framebuffer for the thumbnail FrameBuffer thumbnailBuffer = new FrameBuffer(); //create an associated texture Texture2D tex2d = new Texture2D(256, 256, false, PixelFormat.Rgba, PixelBufferOption.Renderable); thumbnailBuffer.SetColorTarget(tex2d, 0); //sprite to contain the thumbnail thumbnailSprite = new SpriteUV(new TextureInfo(tex2d)); //render the thumbnail: if (Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.CurrentScene == null) { Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.RunWithScene(ts, true); } else { Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.ReplaceScene(ts); } Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.Update(); //save the current framebuffer and viewport FrameBuffer oldBuffer = Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.GetFrameBuffer(); ImageRect oldViewport = Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.GetViewport(); Vector4 oldClearColour = Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.GetClearColor(); //set the new framebuffer for the thumbnail Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetFrameBuffer(thumbnailBuffer); //set the correct viewport Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetViewport(0, 0, 256, 256); Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetClearColor(new Vector4(0.0f, 0.0f, 0.0f, 1.0f)); Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.Clear(); //add the spritelists to the scene foreach (SpriteList sl in spriteList) { ts.Background.AddChild(sl); } //render the thumbnail scene Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.CurrentScene.render(); //switch back to old framebuffer and viewport: Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetFrameBuffer(oldBuffer); Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetViewport(oldViewport); Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetClearColor(oldClearColour); //get rid of the scene //remove all children,but WITHOUT THE CLEANUP(otherwise they won't work in the main Game scene) ts.Background.RemoveAllChildren(false); ts = null; //Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SwapBuffers (); //Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.PostSwap (); //make the thumbnail larger //thumbnailSprite.Position = new Vector2(100.0f,100.0f); thumbnailSprite.FlipV = true; thumbnailSprite.CenterSprite(new Vector2(0.5f, 0.5f)); thumbnailSprite.Scale = new Vector2(400.0f, 400.0f); }
public void GetData<T>(int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct { if (data == null || data.Length == 0) throw new ArgumentException("data cannot be null"); if (data.Length < startIndex + elementCount) throw new ArgumentException("The data passed has a length of " + data.Length + " but " + elementCount + " pixels have been requested."); #if IOS // Reading back a texture from GPU memory is unsupported // in OpenGL ES 2.0 and no work around has been implemented. throw new NotSupportedException("OpenGL ES 2.0 does not support texture reads."); #elif ANDROID Rectangle r; if (rect != null) { r = rect.Value; } else { r = new Rectangle(0, 0, Width, Height); } // Get the Color values if (typeof(T) == typeof(uint)) { Color[] colors = new Color[elementCount]; GetData<Color>(level, rect, colors, startIndex, elementCount); uint[] final = data as uint[]; for (int i = 0; i < final.Length; i++) { final[i] = (uint) ( // use correct xna byte order (and remember to convert it yourself as needed) colors[i].A << 24 | colors[i].B << 16 | colors[i].G << 8 | colors[i].R ); } } // Get the Color values else if ((typeof(T) == typeof(Color))) { byte[] imageInfo = GetTextureData(0); int rWidth = r.Width; int rHeight = r.Height; // Loop through and extract the data but we need to load it var dataRowColOffset = 0; var sz = 0; var pixelOffset = 0; for (int y = r.Top; y < rHeight; y++) { for (int x = r.Left; x < rWidth; x++) { var result = new Color(0, 0, 0, 0); dataRowColOffset = ((y * r.Width) + x); switch (Format) { case SurfaceFormat.Color: //kTexture2DPixelFormat_RGBA8888 case SurfaceFormat.Dxt3: sz = 4; pixelOffset = dataRowColOffset * sz; result.R = imageInfo[pixelOffset]; result.G = imageInfo[pixelOffset + 1]; result.B = imageInfo[pixelOffset + 2]; result.A = imageInfo[pixelOffset + 3]; break; case SurfaceFormat.Bgra4444: //kTexture2DPixelFormat_RGBA4444 // sz = 2; // pos = ((y * imageSize.Width) + x) * sz; // pixelOffset = new IntPtr (imageData.ToInt64 () + pos); // // Marshal.Copy (pixelOffset, pixel, 0, 4); // // result.R = pixel [0]; // result.G = pixel [1]; // result.B = pixel [2]; // result.A = pixel [3]; sz = 2; pixelOffset = dataRowColOffset * sz; result.R = imageInfo[pixelOffset]; result.G = imageInfo[pixelOffset + 1]; result.B = imageInfo[pixelOffset + 2]; result.A = imageInfo[pixelOffset + 3]; break; case SurfaceFormat.Bgra5551: //kTexture2DPixelFormat_RGB5A1 // sz = 2; // pos = ((y * imageSize.Width) + x) * sz; // pixelOffset = new IntPtr (imageData.ToInt64 () + pos); // Marshal.Copy (pixelOffset, pixel, 0, 4); // // result.R = pixel [0]; // result.G = pixel [1]; // result.B = pixel [2]; // result.A = pixel [3]; sz = 2; pixelOffset = dataRowColOffset * sz; result.R = imageInfo[pixelOffset]; result.G = imageInfo[pixelOffset + 1]; result.B = imageInfo[pixelOffset + 2]; result.A = imageInfo[pixelOffset + 3]; break; case SurfaceFormat.Alpha8: // kTexture2DPixelFormat_A8 // sz = 1; // pos = ((y * imageSize.Width) + x) * sz; // pixelOffset = new IntPtr (imageData.ToInt64 () + pos); // Marshal.Copy (pixelOffset, pixel, 0, 4); // // result.A = pixel [0]; sz = 1; pixelOffset = dataRowColOffset * sz; result.A = imageInfo[pixelOffset]; break; default: throw new NotSupportedException("Texture format"); } data[dataRowColOffset] = (T)(object)result; } } } else { throw new NotImplementedException("GetData not implemented for type."); } #elif PSM Rectangle r; if (rect.HasValue) { r = rect.Value; } else { r = new Rectangle(0, 0, Width, Height); } int rWidth = r.Width; int rHeight = r.Height; var sz = 4; // Loop through and extract the data but we need to load it var dataRowColOffset = 0; var pixelOffset = 0; var result = new Color(0, 0, 0, 0); byte[] imageInfo = new byte[(rWidth * rHeight) * sz]; ImageRect old_scissor = GraphicsDevice.Context.GetScissor(); ImageRect old_viewport = GraphicsDevice.Context.GetViewport(); FrameBuffer old_frame_buffer = GraphicsDevice.Context.GetFrameBuffer(); ColorBuffer color_buffer = new ColorBuffer(rWidth, rHeight, PixelFormat.Rgba); FrameBuffer frame_buffer = new FrameBuffer(); frame_buffer.SetColorTarget(color_buffer); GraphicsDevice.Context.SetFrameBuffer(frame_buffer); GraphicsDevice.Context.SetTexture(0, this._texture2D); GraphicsDevice.Context.ReadPixels(imageInfo, PixelFormat.Rgba, 0, 0, rWidth, rHeight); GraphicsDevice.Context.SetFrameBuffer(old_frame_buffer); GraphicsDevice.Context.SetScissor(old_scissor); GraphicsDevice.Context.SetViewport(old_viewport); for (int y = r.Top; y < rHeight; y++) { for (int x = r.Left; x < rWidth; x++) { dataRowColOffset = ((y * r.Width) + x); pixelOffset = dataRowColOffset * sz; result.R = imageInfo[pixelOffset]; result.G = imageInfo[pixelOffset + 1]; result.B = imageInfo[pixelOffset + 2]; result.A = imageInfo[pixelOffset + 3]; data[dataRowColOffset] = (T)(object)result; } } #elif DIRECTX // Create a temp staging resource for copying the data. // // TODO: We should probably be pooling these staging resources // and not creating a new one each time. // var desc = new SharpDX.Direct3D11.Texture2DDescription(); desc.Width = width; desc.Height = height; desc.MipLevels = 1; desc.ArraySize = 1; desc.Format = SharpDXHelper.ToFormat(_format); desc.BindFlags = SharpDX.Direct3D11.BindFlags.None; desc.CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.Read; desc.SampleDescription.Count = 1; desc.SampleDescription.Quality = 0; desc.Usage = SharpDX.Direct3D11.ResourceUsage.Staging; desc.OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.None; var d3dContext = GraphicsDevice._d3dContext; using (var stagingTex = new SharpDX.Direct3D11.Texture2D(GraphicsDevice._d3dDevice, desc)) lock (d3dContext) { // Copy the data from the GPU to the staging texture. int elementsInRow; int rows; if (rect.HasValue) { elementsInRow = rect.Value.Width; rows = rect.Value.Height; d3dContext.CopySubresourceRegion(GetTexture(), level, new SharpDX.Direct3D11.ResourceRegion(rect.Value.Left, rect.Value.Top, 0, rect.Value.Right, rect.Value.Bottom, 1), stagingTex, 0, 0, 0, 0); } else { elementsInRow = width; rows = height; d3dContext.CopySubresourceRegion(GetTexture(), level, null, stagingTex, 0, 0, 0, 0); } // Copy the data to the array. SharpDX.DataStream stream; var databox = d3dContext.MapSubresource(stagingTex, 0, SharpDX.Direct3D11.MapMode.Read, SharpDX.Direct3D11.MapFlags.None, out stream); // Some drivers may add pitch to rows. // We need to copy each row separatly and skip trailing zeros. var currentIndex = startIndex; var elementSize = SharpDX.Utilities.SizeOf<T>(); for (var row = 0; row < rows; row++) { stream.ReadRange(data, currentIndex, elementsInRow); stream.Seek(databox.RowPitch - (elementSize * elementsInRow), SeekOrigin.Current); currentIndex += elementsInRow; } stream.Dispose(); } #else GL.BindTexture(TextureTarget.Texture2D, this.glTexture); if (glFormat == (GLPixelFormat)All.CompressedTextureFormats) { throw new NotImplementedException(); } else { if (rect.HasValue) { var temp = new T[this.width*this.height]; GL.GetTexImage(TextureTarget.Texture2D, level, this.glFormat, this.glType, temp); int z = 0, w = 0; for(int y= rect.Value.Y; y < rect.Value.Y+ rect.Value.Height; y++) { for(int x=rect.Value.X; x < rect.Value.X + rect.Value.Width; x++) { data[z*rect.Value.Width+w] = temp[(y*width)+x]; w++; } z++; } } else { GL.GetTexImage(TextureTarget.Texture2D, level, this.glFormat, this.glType, data); } } #endif }
/// <summary> /// mObjBtnRightAdd_Click(), mObjBtnLeftAdd_Click() /// 右または左へのフレーム追加 /// </summary> /// <param name="nLR"></param> private bool LR_FrameAdd(int nLR) { mObjBtnRightAdd.Enabled = false; objLBRightAdd.Enabled = false; mObjBtnLeftAdd.Enabled = false; objLBLeftAdd.Enabled = false; mObjUDFrameNo.Enabled = true; mObjHSFrame.Enabled = true; // objLBWait.Enabled = true; mObjUDWait.Enabled = true; // 選択解除 if (mObjLVImageRectInfo.SelectedItems.Count > 0) { mObjLVImageRectInfo.SelectedItems[0].Selected = false; } //mObjLVImageRectInfo.SelectedItems.Clear(); // アニメーション AnimationRectFrame tlARF = new AnimationRectFrame(); tlARF.wait = 1; tlARF.imageFileNo = (short)m_imageFileNo; tlARF.imageRectNo = (short)m_imageRectNo; if (nLR == 1) { // 左 m_rAR.aARF.Insert(mObjHSFrame.Value, tlARF); } else { // 右 int n = mObjHSFrame.Value + 1; if (m_rAR.FrameCount == n || m_rAR.FrameCount == 0) { m_rAR.aARF.Add(tlARF); } else { m_rAR.aARF.Insert(n, tlARF); } } int i = m_rAR.FrameCount; // 削除ボタンの有効 if (i > 1) { mObjBtnDelete.Enabled = true; objLBDelete.Enabled = true; } // 最大値の変更 mObjUDFrameNo.Maximum = i - 1; mObjHSFrame.Maximum = i - 1; // フレーム数の表示再設定 mObjLFramePos.Text = "" + i; if (nLR == 0 && i > 1) { // 右 //mObjUDFrameNo.Value += 1; mObjHSFrame.Value += 1; } mObjUDWait.Value = m_rAR.aARF[mObjHSFrame.Value].wait; // リストビューに反映 mObjLVRECT.Items[m_SelectAnimaRectNo].SubItems[1].Text = m_rAR.FrameCount + ""; // m_rIF = m_com.D2Stage.FindRectFromIndex(tlARF.imageFileNo); //mObjXNAScreen.SetImgRect(m_rIF, tlARF.imageRectNo); mObjLBFileNameOut.Text = m_com.D2Stage.RectFilePathFromIndex(tlARF.imageFileNo); mObjLBRectNoOut.Text = tlARF.imageRectNo + ""; return(true); }
/// <summary>Sets the rectangle for the scissor test</summary> /// <param name="rectangle">Rectangle for the scissor test</param> public void SetScissor(ImageRect rectangle) { this.state.Scissor = rectangle; GraphicsContext.notifyUpdate |= GraphicsUpdate.Scissor; }
public static void init(GraphicsContext graphicContext) { graphics = graphicContext; shaderProgram = new ShaderProgram("/Application/shaders/Texture.cgx"); shaderProgram.SetUniformBinding(0, "WorldViewProj"); shaderProgram.SetAttributeBinding(0, "a_Position"); shaderProgram.SetAttributeBinding(1, "a_TexCoord"); textTexture = new Texture2D("/Application/test2.png", false); ImageRect rectScreen = graphics.Screen.Rectangle; Width = rectScreen.Width; Height = rectScreen.Height; // build index list indices = new ushort[indexSize]; indices[0] = 0; indices[1] = 1; indices[2] = 2; indices[3] = 3; // build buffers vertexBuffer0 = new VertexBuffer(4, indexSize, VertexFormat.Float3, VertexFormat.Float2); vertexBuffer1 = new VertexBuffer(4, indexSize, VertexFormat.Float3, VertexFormat.Float2); vertexBuffer2 = new VertexBuffer(4, indexSize, VertexFormat.Float3, VertexFormat.Float2); // build verts for the full quad float[] vertices = new float[12]; vertices[0] = 0.0f; // x0 vertices[1] = 0.0f; // y0 vertices[2] = 0.0f; // z0 vertices[3] = 0.0f; // x1 vertices[4] = 1.0f; // y1 vertices[5] = 0.0f; // z1 vertices[6] = 1.0f; // x2 vertices[7] = 0.0f; // y2 vertices[8] = 0.0f; // z2 vertices[9] = 1.0f; // x3 vertices[10] = 1.0f; // y3 vertices[11] = 0.0f; // z3 // build buffer0 vertexBuffer0.SetVertices(0, vertices); vertexBuffer0.SetVertices(1, texcoords); vertexBuffer0.SetIndices(indices); // build verts for the left quad vertices[0] = 0.0f; // x0 vertices[1] = 0.0f; // y0 vertices[2] = 0.0f; // z0 vertices[3] = 0.0f; // x1 vertices[4] = 1.0f; // y1 vertices[5] = 0.0f; // z1 vertices[6] = 0.5f; // x2 vertices[7] = 0.0f; // y2 vertices[8] = 0.0f; // z2 vertices[9] = 0.5f; // x3 vertices[10] = 1.0f; // y3 vertices[11] = 0.0f; // z3 // build buffer1 vertexBuffer1.SetVertices(0, vertices); vertexBuffer1.SetVertices(1, texcoords); vertexBuffer1.SetIndices(indices); // build verts for the right quad vertices[0] = 0.5f; // x0 vertices[1] = 0.0f; // y0 vertices[2] = 0.0f; // z0 vertices[3] = 0.5f; // x1 vertices[4] = 1.0f; // y1 vertices[5] = 0.0f; // z1 vertices[6] = 1.0f; // x2 vertices[7] = 0.0f; // y2 vertices[8] = 0.0f; // z2 vertices[9] = 1.0f; // x3 vertices[10] = 1.0f; // y3 vertices[11] = 0.0f; // z3 // build buffer2 vertexBuffer2.SetVertices(0, vertices); vertexBuffer2.SetVertices(1, texcoords); vertexBuffer2.SetIndices(indices); unitScreenMatrix = new Matrix4 (Width * 2.0f / rectScreen.Width, 0.0f, 0.0f, 0.0f, 0.0f, Height * (-2.0f) / rectScreen.Height, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, 0.0f, 1.0f ); }
public void SetLocation(ImageRect location) { _location = location; }
public static void NextFrame() { frameCount++; uint runLength = 0x00; byte[] uBytes = new byte[4]; int x = 0; int y = 0; totalBlack = 0; totalWhite = 0; while (true) { decodeStream.Read(uBytes, 0x00, 3); runLength = BitConverter.ToUInt32(uBytes, 0); if (runLength == 0xFFFFFF) { lastColor = true; break; } if (runLength == 0xFEFEFE) { lastColor = false; break; } if (lastColor) { totalBlack += runLength; } else { totalWhite += runLength; } uint totalLength = 0; while (totalLength < runLength) { int thisRow = 0; int ax = x; int ay = y; if ((x + runLength) - totalLength < 480) { thisRow = (int)(runLength - totalLength); ax += thisRow; } else { thisRow = 480 - x; ay += 1; ax = 0; } ImageRect loc = new ImageRect((int)x, (int)y, (int)thisRow, 1); FrameImg.DrawRectangle(lastColor ? black : white, loc); x = ax; y = ay; totalLength += (uint)thisRow; } lastColor = !lastColor; } tex = createTexture(FrameImg); spr = new SampleSprite(tex, ((960 / 2) - 480 / 2), ((544 / 2) - 360 / 2)); }
public void SetViewport(ImageRect rectangle) { // Debug.Assert(false); this.SetViewport(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height); }
public void SetScissor(int x, int y, int w, int h) { // Debug.Assert(false); __scissorRect = new ImageRect(x, y, w, h); GL.Scissor(x, y, w, h); }
public Bounds2 GetViewportf() { ImageRect viewport = this.Context.GetViewport(); return(new Bounds2(new Vector2((float)viewport.X, (float)viewport.Y), new Vector2((float)(viewport.X + viewport.Width), (float)(viewport.Y + viewport.Height)))); }
/// <summary>Sets the rectangle of the viewport</summary> /// <param name="rectangle">Viewport rectangle</param> public void SetViewport(ImageRect rectangle) { this.state.Viewport = rectangle; GraphicsContext.notifyUpdate |= GraphicsUpdate.Viewport; }
//TODO:GraphicsContextにAppScreenを保持できればよいが。 public SpriteBuffer2(GraphicsContext graphics, int maxNumOfSprite, Vector2 screenScale, ImageRect rectAppScreen) { this.m_graphics = graphics; this.screenScale = screenScale; this.rectAppScreen = rectAppScreen; if (shaderProgram == null) { shaderProgram = CreateSpriteBShader(); } m_maxNumOfSprite = maxNumOfSprite; #if true bufferVerties = new float[m_maxNumOfSprite * FNUM_VERTEX_PER_SPRITE]; //0 bufferTexcoords = new float[m_maxNumOfSprite * FNUM_TEXCOORD_PER_SPRITE]; //1 bufferColors = new float[m_maxNumOfSprite * FNUM_COLOR_PER_SPRITE]; //2 bufferWH = new float[m_maxNumOfSprite * FNUM_WH_PER_SPRITE]; //3 bufferCenter = new float[m_maxNumOfSprite * FNUM_CENTER_PER_SPRITE]; //4 bufferRot = new float[m_maxNumOfSprite * FNUM_ROT_PER_SPRITE]; //5 bufferSpritePosition = new float[m_maxNumOfSprite * FNUM_SPOSITION_PER_SPRITE]; //6 bufferIndices = new ushort[m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE]; // vertexBuffer = new VertexBuffer( m_maxNumOfSprite * VERTEX_NUM_PER_SPRITE, m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE, VertexFormat.Float3, //0 VertexFormat.Float2, //1 VertexFormat.Float4, //2 VertexFormat.Float2, //3 VertexFormat.Float2, //4 VertexFormat.Float2, //5 VertexFormat.Float3 //6 ); #else //正しい。 bufferVerties = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 3]; //0 bufferTexcoords = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 2]; //1 bufferColors = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 4]; //2 bufferIndices = new ushort[m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE]; // vertexBuffer = new VertexBuffer( m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE, m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE, VertexFormat.Float3, VertexFormat.Float2, VertexFormat.Float4); #endif }
protected override void AddCardImage() => AddCardImage(ImageRect.Move(-1, 0), false);
private Texture2D CutTexture(string path, BoundBox rectangle) { ImageRect imageRect = new ImageRect ((int)rectangle.X, (int)rectangle.Y, (int)rectangle.Width, (int)rectangle.Height); if(System.IO.File.Exists(@"/Application/Content/Pic/" + path)) { Image image = new Image (@"/Application/Content/Pic/" + path); image.Decode (); texture = new Texture2D ((int)rectangle.Width, (int)rectangle.Height, false, PixelFormat.Rgba); texture.SetPixels (0, image.Crop (imageRect).ToBuffer ()); image.Dispose (); } else DebugScene.Instance.WriteLine("未找到文件:Pic/" + path); return texture; }
public CapturePoint(int wellNumber, int dropNumber, ICaptureProfile[] captureProfiles, ImageRect location, ICapturePoint parent, string regionID, RegionType regionType) { SetWellNumber(wellNumber); SetDropNumber(dropNumber); SetCaptureProfiles(captureProfiles); SetLocation(location); SetParent(parent); SetRegionID(regionID); SetRegionType(regionType); }
/// <summary> /// アニメーションリストをダブルクリックした /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void mObjLVRECT_DoubleClick(object sender, EventArgs e) { Point eM = mObjLVRECT.PointToClient(MousePosition); ListViewItem item = mObjLVRECT.GetItemAt(eM.X, eM.Y); if (item != null) { m_bInitializeing = true; this.BasicFormInit(); m_SelectAnimaRectNo = int.Parse(item.Text); // TABメニュー移動 mObjTab01.SelectedIndex = 1; m_rAR = m_raAnimaRect[m_SelectAnimaRectNo]; mObjGBoxAEdit.Enabled = true; // mObjLFramePos.Text = m_rAR.FrameCount + ""; // フレームが存在しないか if (m_rAR.FrameCount == 0) { // mObjBtnRightAdd.Enabled = false; objLBRightAdd.Enabled = false; mObjBtnLeftAdd.Enabled = false; objLBLeftAdd.Enabled = false; mObjBtnDelete.Enabled = false; objLBDelete.Enabled = false; objLBWait.Enabled = false; mObjUDWait.Enabled = false; // mObjLBFileNameOut.Text = "----"; mObjLBFileName.Enabled = false; mObjLBFileNameOut.Enabled = false; mObjLBRectNoOut.Text = "--"; mObjLBRectNo.Enabled = false; mObjLBRectNoOut.Enabled = false; mObjUDFrameNo.Enabled = false; mObjHSFrame.Enabled = false; ////mObjXNAScreen.SetImgRectEmpty(); } else { // 0フレーム選択状態 mObjBtnRightAdd.Enabled = false; objLBRightAdd.Enabled = false; mObjBtnLeftAdd.Enabled = false; objLBLeftAdd.Enabled = false; objLBWait.Enabled = true; mObjUDWait.Enabled = true; // mObjLBFileName.Enabled = true; mObjLBFileNameOut.Enabled = true; mObjLBRectNo.Enabled = true; mObjLBRectNoOut.Enabled = true; mObjUDFrameNo.Enabled = true; mObjHSFrame.Enabled = true; mObjUDFrameNo.Maximum = m_rAR.FrameCount - 1; mObjHSFrame.Maximum = m_rAR.FrameCount - 1; AnimationRectFrame rTmp = m_rAR.aARF[0]; m_rIF = m_com.D2Stage.FindRectFromIndex(rTmp.imageFileNo); //mObjXNAScreen.SetImgRect(m_rIF, rTmp.imageRectNo); mObjLBFileNameOut.Text = m_com.D2Stage.RectFilePathFromIndex((int)rTmp.imageFileNo); mObjLBRectNoOut.Text = rTmp.imageRectNo + ""; } m_bInitializeing = false; } }
/// <summary> /// コンストラクタ /// </summary> /// <param name="obj"></param> public ReadedRectImageEvent(ImageRect obj) { imageRect = obj; }
public static void SetupNinePatch(UIPrimitive primitive, float width, float height, float offsetX, float offsetY, ImageRect imageRect, NinePatchMargin ninePatchMargin) { if (primitive.MaxVertexCount < 16) { throw new ArgumentOutOfRangeException("primitive", "UIPrimitive MaxVertexCount is out of range."); } if (primitive.MaxIndexCount < 28) { throw new ArgumentOutOfRangeException("primitive", "UIPrimitive MaxIndexCount is out of range."); } if (primitive.Image != null) { float[] array = new float[] { 0f, (float)ninePatchMargin.Left, width - (float)ninePatchMargin.Right, width }; float[] array2 = new float[] { 0f, (float)ninePatchMargin.Top, height - (float)ninePatchMargin.Bottom, height }; if (array[1] > width) { array[1] = width; } if (array[2] < 0f) { array[2] = 0f; } if (array[1] > array[2]) { array[1] = (array[2] = (array[1] + array[2]) / 2f); } if (array2[1] > height) { array2[1] = height; } if (array2[2] < 0f) { array2[2] = 0f; } if (array2[1] > array2[2]) { array2[1] = (array2[2] = (array2[1] + array2[2]) / 2f); } int num = 0; int num2 = 0; int width2 = primitive.Image.Width; int height2 = primitive.Image.Height; int num3 = width2; int num4 = height2; if (imageRect.X < width2 && imageRect.Y < height2 && imageRect.Width > 0 && imageRect.Height > 0) { if (imageRect.X > 0) { num = imageRect.X; } num3 = num + imageRect.Width; if (num3 > width2) { num3 = width2; } if (imageRect.Y > 0) { num2 = imageRect.Y; } num4 = num2 + imageRect.Height; if (num4 > height2) { num4 = height2; } } float num5 = (float)width2; float num6 = (float)height2; float num7 = ((float)ninePatchMargin.Left < array[1] - array[0]) ? ((float)(num + ninePatchMargin.Left)) : ((float)num + array[1] - array[0]); float num8 = ((float)ninePatchMargin.Right < array[3] - array[2]) ? ((float)(num3 - ninePatchMargin.Right)) : ((float)num3 - (array[3] - array[2])); float num9 = ((float)ninePatchMargin.Top < array2[1] - array2[0]) ? ((float)(num2 + ninePatchMargin.Top)) : ((float)num2 + array2[1] - array2[0]); float num10 = ((float)ninePatchMargin.Bottom < array2[3] - array2[2]) ? ((float)(num4 - ninePatchMargin.Bottom)) : ((float)num4 - (array2[3] - array2[2])); float[] array3 = new float[] { (float)num / num5, num7 / num5, num8 / num5, (float)num3 / num5 }; float[] array4 = new float[] { (float)num2 / num6, num9 / num6, num10 / num6, (float)num4 / num6 }; if (array3[2] < array3[0]) { array3[2] = array3[0]; } if (array4[2] < array4[0]) { array4[2] = array4[0]; } if (array3[1] > array3[3]) { array3[1] = array3[3]; } if (array4[1] > array4[3]) { array4[1] = array4[3]; } primitive.VertexCount = 16; primitive.SetIndices(new ushort[] { 0, 4, 1, 5, 2, 6, 3, 7, 7, 4, 4, 8, 5, 9, 6, 10, 7, 11, 11, 8, 8, 12, 9, 13, 10, 14, 11, 15 }); primitive.IndexCount = 28; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { UIPrimitiveVertex vertex = primitive.GetVertex(i * 4 + j); vertex.X = array[j] + offsetX; vertex.Y = array2[i] + offsetY; vertex.U = array3[j]; vertex.V = array4[i]; } } } }