2 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
7 // Blit9.cpp: Surface copy utility class.
9 #ifndef LIBGLESV2_BLIT9_H_
10 #define LIBGLESV2_BLIT9_H_
12 #include "common/angleutils.h"
13 #include "libGLESv2/Error.h"
15 #include <GLES2/gl2.h>
30 explicit Blit9(Renderer9 *renderer);
33 gl::Error initialize();
35 // Copy from source surface to dest surface.
36 // sourceRect, xoffset, yoffset are in D3D coordinates (0,0 in upper-left)
37 gl::Error copy2D(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorage *storage, GLint level);
38 gl::Error copyCube(gl::Framebuffer *framebuffer, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, TextureStorage *storage, GLenum target, GLint level);
40 // Copy from source surface to dest surface.
41 // sourceRect, xoffset, yoffset are in D3D coordinates (0,0 in upper-left)
42 // source is interpreted as RGBA and destFormat specifies the desired result format. For example, if destFormat = GL_RGB, the alpha channel will be forced to 0.
43 gl::Error formatConvert(IDirect3DSurface9 *source, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, IDirect3DSurface9 *dest);
45 // 2x2 box filter sample from source to dest.
46 // Requires that source is RGB(A) and dest has the same format as source.
47 gl::Error boxFilter(IDirect3DSurface9 *source, IDirect3DSurface9 *dest);
50 rx::Renderer9 *mRenderer;
53 IDirect3DVertexBuffer9 *mQuadVertexBuffer;
54 IDirect3DVertexDeclaration9 *mQuadVertexDeclaration;
56 gl::Error setFormatConvertShaders(GLenum destFormat);
58 gl::Error copy(IDirect3DSurface9 *source, const RECT &sourceRect, GLenum destFormat, GLint xoffset, GLint yoffset, IDirect3DSurface9 *dest);
59 gl::Error copySurfaceToTexture(IDirect3DSurface9 *surface, const RECT &sourceRect, IDirect3DTexture9 **outTexture);
60 void setViewport(const RECT &sourceRect, GLint xoffset, GLint yoffset);
61 void setCommonBlitState();
62 RECT getSurfaceRect(IDirect3DSurface9 *surface) const;
64 // This enum is used to index mCompiledShaders and mShaderSource.
69 SHADER_PS_PASSTHROUGH,
71 SHADER_PS_COMPONENTMASK,
75 // This actually contains IDirect3DVertexShader9 or IDirect3DPixelShader9 casted to IUnknown.
76 IUnknown *mCompiledShaders[SHADER_COUNT];
78 template <class D3DShaderType>
79 gl::Error setShader(ShaderId source, const char *profile,
80 gl::Error (Renderer9::*createShader)(const DWORD *, size_t length, D3DShaderType **outShader),
81 HRESULT (WINAPI IDirect3DDevice9::*setShader)(D3DShaderType*));
83 gl::Error setVertexShader(ShaderId shader);
84 gl::Error setPixelShader(ShaderId shader);
89 IDirect3DStateBlock9 *mSavedStateBlock;
90 IDirect3DSurface9 *mSavedRenderTarget;
91 IDirect3DSurface9 *mSavedDepthStencil;
93 DISALLOW_COPY_AND_ASSIGN(Blit9);
97 #endif // LIBGLESV2_BLIT9_H_