0

Combine mask texture parameters into single gfx::RectF

This folds the 4 floats together into a single parameter to be slightly easier to manage, but doesn't change the logic.

BUG=


Review URL: https://chromiumcodereview.appspot.com/11543013

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@172825 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
jamesr@chromium.org
2012-12-13 05:12:18 +00:00
parent 5964eadd8e
commit 458af1e746
11 changed files with 46 additions and 95 deletions

@ -81,7 +81,7 @@ static void addRenderPassQuad(TestRenderPass* toPass, TestRenderPass* contributi
SharedQuadState* sharedState = quadSink.useSharedQuadState(SharedQuadState::Create());
sharedState->SetAll(gfx::Transform(), outputRect, outputRect, outputRect, false, 1);
scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
quad->SetNew(sharedState, outputRect, contributingPass->id, false, 0, outputRect, 0, 0, 0, 0);
quad->SetNew(sharedState, outputRect, contributingPass->id, false, 0, outputRect, gfx::RectF());
quadSink.append(quad.PassAs<DrawQuad>(), data);
}

@ -156,6 +156,18 @@ void compareDrawQuad(DrawQuad* quad, DrawQuad* copy, SharedQuadState* copyShared
quadAll->SetAll(sharedState.get(), quadRect, quadOpaqueRect, quadVisibleRect, needsBlending, a, b, c, d, e); } \
SETUP_AND_COPY_QUAD_ALL(Type, quadAll);
#define CREATE_QUAD_5_NEW_1(Type, a, b, c, d, e, copyA) \
scoped_ptr<Type> quadNew(Type::Create()); \
{ QUAD_DATA \
quadNew->SetNew(sharedState.get(), quadRect, a, b, c, d, e); } \
SETUP_AND_COPY_QUAD_NEW_1(Type, quadNew, copyA);
#define CREATE_QUAD_5_ALL_1(Type, a, b, c, d, e, copyA) \
scoped_ptr<Type> quadAll(Type::Create()); \
{ QUAD_DATA \
quadAll->SetAll(sharedState.get(), quadRect, quadOpaqueRect, quadVisibleRect, needsBlending, a, b, c, d, e); } \
SETUP_AND_COPY_QUAD_ALL_1(Type, quadAll, copyA);
#define CREATE_QUAD_6_NEW(Type, a, b, c, d, e, f) \
scoped_ptr<Type> quadNew(Type::Create()); \
{ QUAD_DATA \
@ -192,18 +204,6 @@ void compareDrawQuad(DrawQuad* quad, DrawQuad* copy, SharedQuadState* copyShared
quadAll->SetAll(sharedState.get(), quadRect, quadOpaqueRect, quadVisibleRect, needsBlending, a, b, c, d, e, f, g, h); } \
SETUP_AND_COPY_QUAD_ALL(Type, quadAll);
#define CREATE_QUAD_8_NEW_1(Type, a, b, c, d, e, f, g, h, copyA) \
scoped_ptr<Type> quadNew(Type::Create()); \
{ QUAD_DATA \
quadNew->SetNew(sharedState.get(), quadRect, a, b, c, d, e, f, g, h); } \
SETUP_AND_COPY_QUAD_NEW_1(Type, quadNew, copyA);
#define CREATE_QUAD_8_ALL_1(Type, a, b, c, d, e, f, g, h, copyA) \
scoped_ptr<Type> quadAll(Type::Create()); \
{ QUAD_DATA \
quadAll->SetAll(sharedState.get(), quadRect, quadOpaqueRect, quadVisibleRect, needsBlending, a, b, c, d, e, f, g, h); } \
SETUP_AND_COPY_QUAD_ALL_1(Type, quadAll, copyA);
#define CREATE_QUAD_9_NEW(Type, a, b, c, d, e, f, g, h, i) \
scoped_ptr<Type> quadNew(Type::Create()); \
{ QUAD_DATA \
@ -275,35 +275,26 @@ TEST(DrawQuadTest, copyRenderPassDrawQuad)
bool isReplica = true;
ResourceProvider::ResourceId maskResourceId = 78;
gfx::Rect contentsChangedSinceLastFrame(42, 11, 74, 24);
float maskTexCoordScaleX = 33;
float maskTexCoordScaleY = 19;
float maskTexCoordOffsetX = -45;
float maskTexCoordOffsetY = -21;
gfx::RectF maskUVRect(-45, -21, 33, 19);
RenderPass::Id copiedRenderPassId(235, 11);
CREATE_SHARED_STATE();
CREATE_QUAD_8_NEW_1(RenderPassDrawQuad, renderPassId, isReplica, maskResourceId, contentsChangedSinceLastFrame, maskTexCoordScaleX, maskTexCoordScaleY, maskTexCoordOffsetX, maskTexCoordOffsetY, copiedRenderPassId);
CREATE_QUAD_5_NEW_1(RenderPassDrawQuad, renderPassId, isReplica, maskResourceId, contentsChangedSinceLastFrame, maskUVRect, copiedRenderPassId);
EXPECT_EQ(DrawQuad::RENDER_PASS, copyQuad->material);
EXPECT_EQ(copiedRenderPassId, copyQuad->render_pass_id);
EXPECT_EQ(isReplica, copyQuad->is_replica);
EXPECT_EQ(maskResourceId, copyQuad->mask_resource_id);
EXPECT_RECT_EQ(contentsChangedSinceLastFrame, copyQuad->contents_changed_since_last_frame);
EXPECT_EQ(maskTexCoordScaleX, copyQuad->mask_tex_coord_scale_x);
EXPECT_EQ(maskTexCoordScaleY, copyQuad->mask_tex_coord_scale_y);
EXPECT_EQ(maskTexCoordOffsetX, copyQuad->mask_tex_coord_offset_x);
EXPECT_EQ(maskTexCoordOffsetY, copyQuad->mask_tex_coord_offset_y);
EXPECT_EQ(maskUVRect.ToString(), copyQuad->mask_uv_rect.ToString());
CREATE_QUAD_8_ALL_1(RenderPassDrawQuad, renderPassId, isReplica, maskResourceId, contentsChangedSinceLastFrame, maskTexCoordScaleX, maskTexCoordScaleY, maskTexCoordOffsetX, maskTexCoordOffsetY, copiedRenderPassId);
CREATE_QUAD_5_ALL_1(RenderPassDrawQuad, renderPassId, isReplica, maskResourceId, contentsChangedSinceLastFrame, maskUVRect, copiedRenderPassId);
EXPECT_EQ(DrawQuad::RENDER_PASS, copyQuad->material);
EXPECT_EQ(copiedRenderPassId, copyQuad->render_pass_id);
EXPECT_EQ(isReplica, copyQuad->is_replica);
EXPECT_EQ(maskResourceId, copyQuad->mask_resource_id);
EXPECT_RECT_EQ(contentsChangedSinceLastFrame, copyQuad->contents_changed_since_last_frame);
EXPECT_EQ(maskTexCoordScaleX, copyQuad->mask_tex_coord_scale_x);
EXPECT_EQ(maskTexCoordScaleY, copyQuad->mask_tex_coord_scale_y);
EXPECT_EQ(maskTexCoordOffsetX, copyQuad->mask_tex_coord_offset_x);
EXPECT_EQ(maskTexCoordOffsetY, copyQuad->mask_tex_coord_offset_y);
EXPECT_EQ(maskUVRect.ToString(), copyQuad->mask_uv_rect.ToString());
}
TEST(DrawQuadTest, copySolidColorDrawQuad)

@ -628,8 +628,8 @@ void GLRenderer::drawRenderPassQuad(DrawingFrame& frame, const RenderPassDrawQua
DCHECK(shaderMaskTexCoordOffsetLocation != 1);
GLC(context(), context()->activeTexture(GL_TEXTURE1));
GLC(context(), context()->uniform1i(shaderMaskSamplerLocation, 1));
GLC(context(), context()->uniform2f(shaderMaskTexCoordScaleLocation, quad->mask_tex_coord_scale_x, quad->mask_tex_coord_scale_y));
GLC(context(), context()->uniform2f(shaderMaskTexCoordOffsetLocation, quad->mask_tex_coord_offset_x, quad->mask_tex_coord_offset_y));
GLC(context(), context()->uniform2f(shaderMaskTexCoordOffsetLocation, quad->mask_uv_rect.x(), quad->mask_uv_rect.y()));
GLC(context(), context()->uniform2f(shaderMaskTexCoordScaleLocation, quad->mask_uv_rect.width(), quad->mask_uv_rect.height()));
m_resourceProvider->bindForSampling(quad->mask_resource_id, GL_TEXTURE_2D, GL_LINEAR);
GLC(context(), context()->activeTexture(GL_TEXTURE0));
}

@ -4319,7 +4319,7 @@ static void configureRenderPassTestData(const char* testScript, RenderPassRemova
gfx::Rect quadRect = gfx::Rect(0, 0, 1, 1);
gfx::Rect contentsChangedRect = contentsChanged ? quadRect : gfx::Rect();
scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
quad->SetNew(testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, contentsChangedRect, 1, 1, 0, 0);
quad->SetNew(testData.sharedQuadState.get(), quadRect, newRenderPassId, isReplica, 1, contentsChangedRect, gfx::RectF(0, 0, 1, 1));
renderPass->AppendQuad(quad.PassAs<DrawQuad>());
}
}

@ -9,11 +9,7 @@ namespace cc {
RenderPassDrawQuad::RenderPassDrawQuad()
: render_pass_id(RenderPass::Id(-1, -1)),
is_replica(false),
mask_resource_id(-1),
mask_tex_coord_scale_x(0),
mask_tex_coord_scale_y(0),
mask_tex_coord_offset_x(0),
mask_tex_coord_offset_y(0) {
mask_resource_id(-1) {
}
scoped_ptr<RenderPassDrawQuad> RenderPassDrawQuad::Create() {
@ -35,10 +31,7 @@ void RenderPassDrawQuad::SetNew(const SharedQuadState* shared_quad_state,
bool is_replica,
ResourceProvider::ResourceId mask_resource_id,
gfx::Rect contents_changed_since_last_frame,
float mask_tex_coord_scale_x,
float mask_tex_coord_scale_y,
float mask_tex_coord_offset_x,
float mask_tex_coord_offset_y) {
gfx::RectF mask_uv_rect) {
DCHECK(render_pass_id.layer_id > 0);
DCHECK(render_pass_id.index >= 0);
@ -51,10 +44,7 @@ void RenderPassDrawQuad::SetNew(const SharedQuadState* shared_quad_state,
this->is_replica = is_replica;
this->mask_resource_id = mask_resource_id;
this->contents_changed_since_last_frame = contents_changed_since_last_frame;
this->mask_tex_coord_scale_x = mask_tex_coord_scale_x;
this->mask_tex_coord_scale_y = mask_tex_coord_scale_y;
this->mask_tex_coord_offset_x = mask_tex_coord_offset_x;
this->mask_tex_coord_offset_y = mask_tex_coord_offset_y;
this->mask_uv_rect = mask_uv_rect;
}
void RenderPassDrawQuad::SetAll(const SharedQuadState* shared_quad_state,
@ -66,10 +56,7 @@ void RenderPassDrawQuad::SetAll(const SharedQuadState* shared_quad_state,
bool is_replica,
ResourceProvider::ResourceId mask_resource_id,
gfx::Rect contents_changed_since_last_frame,
float mask_tex_coord_scale_x,
float mask_tex_coord_scale_y,
float mask_tex_coord_offset_x,
float mask_tex_coord_offset_y) {
gfx::RectF mask_uv_rect) {
DCHECK(render_pass_id.layer_id > 0);
DCHECK(render_pass_id.index >= 0);
@ -79,10 +66,7 @@ void RenderPassDrawQuad::SetAll(const SharedQuadState* shared_quad_state,
this->is_replica = is_replica;
this->mask_resource_id = mask_resource_id;
this->contents_changed_since_last_frame = contents_changed_since_last_frame;
this->mask_tex_coord_scale_x = mask_tex_coord_scale_x;
this->mask_tex_coord_scale_y = mask_tex_coord_scale_y;
this->mask_tex_coord_offset_x = mask_tex_coord_offset_x;
this->mask_tex_coord_offset_y = mask_tex_coord_offset_y;
this->mask_uv_rect = mask_uv_rect;
}
const RenderPassDrawQuad* RenderPassDrawQuad::MaterialCast(

@ -24,10 +24,7 @@ class CC_EXPORT RenderPassDrawQuad : public DrawQuad {
bool is_replica,
ResourceProvider::ResourceId mask_resource_id,
gfx::Rect contents_changed_since_last_frame,
float mask_tex_coord_scale_x,
float mask_tex_coord_scale_y,
float mask_tex_coord_offset_x,
float mask_tex_coord_offset_y);
gfx::RectF mask_uv_rect);
void SetAll(const SharedQuadState* shared_quad_state,
gfx::Rect rect,
@ -38,10 +35,7 @@ class CC_EXPORT RenderPassDrawQuad : public DrawQuad {
bool is_replica,
ResourceProvider::ResourceId mask_resource_id,
gfx::Rect contents_changed_since_last_frame,
float mask_tex_coord_scale_x,
float mask_tex_coord_scale_y,
float mask_tex_coord_offset_x,
float mask_tex_coord_offset_y);
gfx::RectF mask_uv_rect);
scoped_ptr<RenderPassDrawQuad> Copy(
const SharedQuadState* copied_shared_quad_state,
@ -51,11 +45,7 @@ class CC_EXPORT RenderPassDrawQuad : public DrawQuad {
bool is_replica;
ResourceProvider::ResourceId mask_resource_id;
gfx::Rect contents_changed_since_last_frame;
// TODO(danakj): Make these a tex_coord_rect like TileDrawQuad.
float mask_tex_coord_scale_x;
float mask_tex_coord_scale_y;
float mask_tex_coord_offset_x;
float mask_tex_coord_offset_y;
gfx::RectF mask_uv_rect;
static const RenderPassDrawQuad* MaterialCast(const DrawQuad*);
private:

@ -225,23 +225,22 @@ void RenderSurfaceImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& appendQ
maskLayer = 0;
}
float maskTexCoordScaleX = 1;
float maskTexCoordScaleY = 1;
float maskTexCoordOffsetX = 0;
float maskTexCoordOffsetY = 0;
gfx::RectF maskUVRect(0.0f, 0.0f, 1.0f, 1.0f);
if (maskLayer) {
maskTexCoordScaleX = contentRect().width() / maskLayer->contentsScaleX() / maskLayer->bounds().width();
maskTexCoordScaleY = contentRect().height() / maskLayer->contentsScaleY() / maskLayer->bounds().height();
maskTexCoordOffsetX = static_cast<float>(contentRect().x()) / contentRect().width() * maskTexCoordScaleX;
maskTexCoordOffsetY = static_cast<float>(contentRect().y()) / contentRect().height() * maskTexCoordScaleY;
float scaleX = contentRect().width() / maskLayer->contentsScaleX() / maskLayer->bounds().width();
float scaleY = contentRect().height() / maskLayer->contentsScaleY() / maskLayer->bounds().height();
maskUVRect = gfx::RectF(static_cast<float>(contentRect().x()) / contentRect().width() * scaleX,
static_cast<float>(contentRect().y()) / contentRect().height() * scaleY,
scaleX,
scaleY);
}
ResourceProvider::ResourceId maskResourceId = maskLayer ? maskLayer->contentsResourceId() : 0;
gfx::Rect contentsChangedSinceLastFrame = contentsChanged() ? m_contentRect : gfx::Rect();
scoped_ptr<RenderPassDrawQuad> quad = RenderPassDrawQuad::Create();
quad->SetNew(sharedQuadState, contentRect(), renderPassId, forReplica, maskResourceId, contentsChangedSinceLastFrame,
maskTexCoordScaleX, maskTexCoordScaleY, maskTexCoordOffsetX, maskTexCoordOffsetY);
quad->SetNew(sharedQuadState, contentRect(), renderPassId, forReplica, maskResourceId, contentsChangedSinceLastFrame, maskUVRect);
quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
}

@ -321,10 +321,10 @@ void SoftwareRenderer::drawRenderPassQuad(const DrawingFrame& frame, const Rende
const SkBitmap* mask = maskLock.skBitmap();
SkRect maskRect = SkRect::MakeXYWH(
quad->mask_tex_coord_offset_x * mask->width(),
quad->mask_tex_coord_offset_y * mask->height(),
quad->mask_tex_coord_scale_x * mask->width(),
quad->mask_tex_coord_scale_y * mask->height());
quad->mask_uv_rect.x() * mask->width(),
quad->mask_uv_rect.y() * mask->height(),
quad->mask_uv_rect.width() * mask->width(),
quad->mask_uv_rect.height() * mask->height());
SkMatrix maskMat;
maskMat.setRectToRect(maskRect, destRect, SkMatrix::kFill_ScaleToFit);

@ -67,10 +67,7 @@ void TestRenderPass::AppendOneOfEveryQuadType(cc::ResourceProvider* resourceProv
false,
0,
rect,
0,
0,
0,
0);
gfx::RectF());
AppendQuad(render_pass_quad.PassAs<DrawQuad>());
scoped_ptr<cc::SolidColorDrawQuad> solid_color_quad =

@ -153,10 +153,7 @@ IPC_STRUCT_TRAITS_BEGIN(cc::RenderPassDrawQuad)
IPC_STRUCT_TRAITS_MEMBER(is_replica)
IPC_STRUCT_TRAITS_MEMBER(mask_resource_id)
IPC_STRUCT_TRAITS_MEMBER(contents_changed_since_last_frame)
IPC_STRUCT_TRAITS_MEMBER(mask_tex_coord_scale_x)
IPC_STRUCT_TRAITS_MEMBER(mask_tex_coord_scale_y)
IPC_STRUCT_TRAITS_MEMBER(mask_tex_coord_offset_x)
IPC_STRUCT_TRAITS_MEMBER(mask_tex_coord_offset_y)
IPC_STRUCT_TRAITS_MEMBER(mask_uv_rect)
IPC_STRUCT_TRAITS_END()
IPC_STRUCT_TRAITS_BEGIN(cc::SolidColorDrawQuad)

@ -129,10 +129,7 @@ class CCMessagesTest : public testing::Test {
EXPECT_EQ(a->mask_resource_id, b->mask_resource_id);
EXPECT_EQ(a->contents_changed_since_last_frame,
b->contents_changed_since_last_frame);
EXPECT_EQ(a->mask_tex_coord_scale_x, b->mask_tex_coord_scale_x);
EXPECT_EQ(a->mask_tex_coord_scale_y, b->mask_tex_coord_scale_y);
EXPECT_EQ(a->mask_tex_coord_offset_x, b->mask_tex_coord_offset_x);
EXPECT_EQ(a->mask_tex_coord_offset_y, b->mask_tex_coord_offset_y);
EXPECT_EQ(a->mask_uv_rect.ToString(), b->mask_uv_rect.ToString());
}
void Compare(const SolidColorDrawQuad* a, const SolidColorDrawQuad* b) {
@ -202,7 +199,6 @@ TEST_F(CCMessagesTest, AllQuads) {
float arbitrary_float1 = 0.7f;
float arbitrary_float2 = 0.3f;
float arbitrary_float3 = 0.9f;
float arbitrary_float4 = 0.1f;
bool arbitrary_bool1 = true;
bool arbitrary_bool2 = false;
int arbitrary_int = 5;
@ -294,10 +290,7 @@ TEST_F(CCMessagesTest, AllQuads) {
arbitrary_bool2,
arbitrary_resourceid,
arbitrary_rect1,
arbitrary_float1,
arbitrary_float2,
arbitrary_float3,
arbitrary_float4);
arbitrary_rectf1);
scoped_ptr<RenderPassDrawQuad> renderpass_cmp = renderpass_in->Copy(
renderpass_in->shared_quad_state, renderpass_in->render_pass_id);