From 599cbc140f200b530d619f2074c928d9c7fd7829 Mon Sep 17 00:00:00 2001 From: rachytski Date: Mon, 12 Nov 2012 13:51:18 +0300 Subject: [PATCH] added ImageRenderer and tests for it. --- coding/lodepng_io.hpp | 3 +- data/test.png | Bin 0 -> 213771 bytes graphics/area_renderer.cpp | 246 ++++---- graphics/area_renderer.hpp | 63 +-- graphics/graphics.pro | 8 +- graphics/graphics_tests/screengl_test.cpp | 26 +- .../graphics_tests/shape_renderer_test.cpp | 2 +- graphics/image_info.cpp | 53 ++ graphics/image_info.hpp | 31 + graphics/image_renderer.cpp | 67 +++ graphics/image_renderer.hpp | 21 + graphics/path_renderer.cpp | 535 +++++++++--------- graphics/path_renderer.hpp | 51 +- graphics/pen_info.hpp | 4 +- graphics/resource_style.cpp | 44 ++ graphics/resource_style.hpp | 46 +- graphics/shape_renderer.cpp | 368 ++++++------ graphics/shape_renderer.hpp | 89 ++- graphics/skin.cpp | 17 + graphics/skin.hpp | 5 + graphics/skin_page.cpp | 44 ++ graphics/skin_page.hpp | 9 + graphics/text_renderer.hpp | 6 +- graphics/texture.hpp | 7 +- qt_tstfrm/macros.hpp | 3 - qt_tstfrm/tstwidgets.cpp | 2 +- 26 files changed, 1033 insertions(+), 717 deletions(-) create mode 100644 data/test.png create mode 100644 graphics/image_info.cpp create mode 100644 graphics/image_info.hpp create mode 100644 graphics/image_renderer.cpp create mode 100644 graphics/image_renderer.hpp diff --git a/coding/lodepng_io.hpp b/coding/lodepng_io.hpp index f0eb1b0230..f6254e4c62 100644 --- a/coding/lodepng_io.hpp +++ b/coding/lodepng_io.hpp @@ -129,7 +129,8 @@ inline void lodepng_read_and_convert_view(ReaderPtr & reader,const View& /// \brief Loads the image specified by the given png image file name and color-converts it into the given view. template inline void lodepng_read_and_convert_view(ReaderPtr & reader,const View& view,CC cc) { - lodepng_read_and_convert_view(reader,view,cc); + detail::lodepng_reader_color_convert m(reader, cc); + m.apply(view); } /// \ingroup LODEPNG_IO diff --git a/data/test.png b/data/test.png new file mode 100644 index 0000000000000000000000000000000000000000..f8518c6127bc84199f0ecd22f18ceb6222662947 GIT binary patch literal 213771 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

rZ1!0h&#PdL0Hj1$t6V1jXO7 z<*^zJr9y-Z3$bDGXE<@s@ZiOd;c%6mbJJ%o9FuU2A3~PP~6z&Q$Krx6Za3XwSJv)wN5IzgYirA zM1o;@Mmo5(sPOWoG8eARad>}#4?S@=GfPz_wpHFb`!Zgw%Id-@EAx}=+ttoyW|JG^ zv$VJOQp{}7-xr{-zk{2%&f<;q(9wN}?Q90GUnLQ1qiHm6Z|7SnJGX@<2m<&6AtuJh z`SO?k2iGrM=Ek*4;JEz#m;V~q76=A|6pLAqG^({44?grha9x%c=kWUc{KMD(k+tPT zs?{oEyY|qm*D)=tr9-q^)5Xg67Uj)6hxZH-jrfuE6sxyR6N`A6oxVg{G(tGlj;tsw zE==OsBEd+E`MFzo{Rtc^k83t*Ywu@cGlSqZ@doG3?qJf*{f;R}lr9 za>HPIbBkCg0P;W$ze=rE!teEjYT2c~cn^{Rj{h$O>pd;u#f#6p=gwf;7LR`LR}XJ5 zz084wcN0z>#OqUORJUkWYs5Q-*v?it`0&maoL9?|&lrph?_+U(g2`LAD7#@I@ep78 zyWhvILRV*shaS5V!>Y3|a{*5Pd;uTpOF3+z1KI0G_DN`p$n;zhQ`8aMI;mtInx-R3 zV#_`TxuwGr9VD@}rga4yK>%3`VwnLlZ-VyjPBKe#eC7*xqWbo8 z>$<^>o6qsJZ~YCTogy6>r8^xan^~Y{*z^vKFfz0UU7NzTB;GvvU3vz0FtFp(Y-|;n zUz|Y{ycju)yAB_qExkrHe*>%#Lp}HN6wtjM zY^Q-?nog&l_;;NSelzr(R2WHtm|ef|wT_bVTzyEnzv3$O8^u_uTGA}lP<)7RVIS|mvV zrfuT7tp$%@JFVxUM5)r?32< zg+=PMIxY_P9D9h)?tU(vzsS4qyv>f?`$)vX)SESAL|oU#m1WwJNs4pplq*#l#R941 zKCX#=TuCJmiLt&sL+}2>c>EsP+PYYnU7(|9Cq3PJSXiE=R;m(@Nkk%1LZLJ(OE>B4 z?V)MG`uueUaPYSElFwwQ(LLHv;r=f3j|Liicn*$txD?dv?0LJ&57S_s&C7?vQ2 z2uQa>Q$<1{&*Ab`h5msZtZ%I1_35lFPa=ylv0w+mNGGY@9-s=q-1IEF_w1)$uMv$W zaGV;t2ZAAuWGacOc&U{0MB)h?q0HFs5oAfmYFdc0AIa;XVKzY0Ieq>nipP(DK`0(V zmSiN`K@=23QEqwu2(5OxHMZH{+GvU&ui8a1+r;ln5(y>ns2&_gMMg$MAlx&ACfY1c zOd!cYBuRY_l)TM8Yh4e?#j-3UNka8`nVy=WUM;cz;9f4g^CliolVrLZMH49(>Wu9< zNTspPTJ9!~eE2br-u)pA(@(Kb;J^tkT!>5hiaoS)O0x*uA|3 zbT8M>T_C92GzulMTa#3)>xAP;9JN86BIRP4v#&fuz`xGULu~|;DMt4_NyCot;E7N0 z$)Ec?OE=$T;++@RamV9KE^pG_o#Mz{_fXh8g{C*zdFTQ9I(K5O=O`|mA`z1)w&}Rt z{RC8%*v2e7{2EF~qv|@SUIAaoq%8@1?%l_MgFj1B=|pdqajkWrK)~lG=J&S1Tv560 zzoa6H4j$PLRO)ODrrda_s)SeB`4CIPvHpAN|Gq`L*AFk^>(& z%!*m0ZWlRq=4EnQ7V3NzbAFks1MJ+1z5iY+gwRAEQLjkIoa6lu?4+=Cf!CgWnw`g< zWOcJnJ(J<^$S~RY)0DPv(cU@A_n&%+iEC5DG?&Ka6%Ot0AndJTFU>-6n~oTK_7hLC zy*z>A)>zuwU@dF&&p-DB?dna+vzH-Th3Tu@xo-%iw#1H3AG-!b-uKbNBmzzT^ozg4 z*|*P7*oL=XeVYEE9z?al%IYe81AAGTxkPq(f}XB4hG~+^7f=)h(=uBd!`rJp;r7O? zQYmxCUH7r~jyv&qeB5{M!we1XC7UVY(LAI(y6Ea2pkccdDkZiy*AXQd(=e%4%f#bp zf}to~-F=*U=QJL#zqMf(Wkk`%6_ zY47X+H`990T@ew9a3sJTcRt3*=zf0ov%kT>jzb7;0a1Xp#aUnzJ<^V%htXtMS(>FS znWnpEl=jX}wpV7T8zo;eGe2T%&tqifFfwyLyo2Rrlh$GNPcqw;>d7k8q;m zB8s3$K4ecfW>v-S4^zo)A>pG@*V$ZKBeOb*j7>n2nZ7ZNVJhH)^j;zV$!5^893)Z3 zvTZ&<7VS_`zLJuJ-35K2fq@Z=-- z{0CXSwaS@izeiWw2&GztuYBb!uRVK~M;^M1fa-AOg=aZ5e1x4{gLs_{cJ0(zTfW6V zeEkKs%3Y|PcX9686{f~7@c8@h=E%V=qG}PLxP(%jXGd=m)hu!Lfnlaby5G><^OEr^!vAmrNYbL#xU-Q5hgt6-QU zgK_S=>p_P4c9Ji*e4K)Mk$Pp4*|jAmmKG^hws8duRhBVruv}0T55;_yciwr2@##e} zbpcEEp{N4eo3mKW723Nry8F7gSZ(+^M zQ85j&VJ}M_Xb2jj+<~rl5lxH{iX|}X)10_>n8NxTPd{~v_Czn+^NTq70(*yd@a`Mm zWo>Z^-BB6s>fl#@{v#Yc)Wb{9e;L;?5k1}DAHlFRR+kpB$`u5wj6bMRw;Me2&dGyyzY;K97glnQ?3jWKls9K$2u! zLB#L#qIrE3N)4*zDp+;WUBi@`5DEt|>Mo_s2Dk=3zaQK1P%W2;B|1<9f#KmJ?Ad#i z&ix1RdIHQ$Eubpk^>`_lD%5imDE>ACS*N$VlN%S_CKwDOND84)qQynCYRI0@eUdkX z6JC7Zlo4Jmr_^~a6R635}!uI+SUaud=6p&;Ost!ciWSqc&erqDDW9&eODI7T9sLe&H`O~$MHkpv&XKpLyrAQ%bb@oJcYg~uCW zZG4&a?F_1_6A8!AeF~Z)p-Kv}pdbh`g5V&CPHRgj2#B}8jvQ1XsbN$#MlqM6W5<3v z_Z{cJk;h4O_2G{OFzQ7l)q^U9z!h68;Q!@<2)BDIK@f2S0a;S0my47u6*@XoUDXh)1bMOFfe&cC+6Ahkx|6vZ^aTlUI%A4n!Jbikeb5j!> zd-M^!-T-et{dd?~b3AeP4u1C0{m7LCF1-0N`wkt$qLYhfukqwZ-iO(^MAMuk+_sn3 z-<`s&`)TuP^tM6&&@jzUjGy!^_m zoV)T0IeVFKN+6N&vphG;tFOPw>iQA_76Pq!DM@zGbr0oonOl>aymMilZ$EX0r@#4i zF24SCba$JbgDIj)nC3#2&FdRXp3QRl*(IL;?j$e1Hcqu#Wu#iixqOy#rB2@KrLp4x z4K2n?PyHS9%O$2Jo1DIs$J4QoNP90vb)F|5+Cf-?sS6d-(H)$8?M0U6Zt}@b{|iRC zlO%K#BR4^3)Z*B^PclAV<$JHchSL@0(!v6N_qEepzF4KFD@naD&L= zr`+-2ql_H$^S94V^WVSv5?^}eJRkYZ_cK}2`Q0zQ#c%!5Q@D{Jk|go?hd#`2|L$*7 z%#=9!+DpWf{VXr9;@BFyb{*pS`5z)+peP=4xgwQn1yxp%q}HUv?Mwv+0Ys5%v&ut{ zd;kYn-`rqq=U$E+y%)<6s1yray?h4Cb{O635gbAS`=MmMIsmpvaq~~WjSCJiFWj0x)QpkBM49`Uq$fAaXjzo*M0vaMJf}|t) zV=UL|xbZHOL?=eGiQo$(YatXhN+`X9)b3sQJb6?*hbH~FP${?R3pOG)lHh_Rpr|@a z>(|+CSj3Z~EM0zwv|pe%9;7=OV{pKS9!&7&YZplb1MD8Ulhp~6ojnpe2O{LN8Qy;D z8A8z-zxi7q&&%ZcJaoRW$BBa2J8X5(Dxwj~(gY z$e~d@;XWF5g+{r~*Z$#I7K#xXAwMg*bM%jNapl6Bs6HR5funr&@BfjH{_NdQnxec_ zq_g9roO`#y_;?nN$0ob-7RyublI|R)b9g6RLx)*fs4*KKMm~5ifnWeFzrm=HXJ@xf zN5>ZFwk3MHMY?<2X}S(e>zl-qee4(-AQklD^Xk}Uz2!21OrzdFkwk2vj-gqgh(tUF z$zYk`PMz*Hlc3LJb1B36rcAN!V{>hT{C0-*sS-C{U1IUeKVaiW|460UARmabnB2jY zg#xcW^ET;3iaYN+&RpKl7r#5tE7uA{d+sF>=s{Xp;9q|DAVPkNtJexF6!u(!gjMU`pWFxCl6c zh$FdFoig5NfKPwnU-R`JexJFGW$u6UIE!23=pl{!PrMJ+GPrf_G$-yo&auNs33@z; zw!w`{@3K69lV+pLJ;&~)*(~Eq4vs1zh#)yOUP(d@23Xk0(a2YEOIv867_Q{Qur&mq zN;bOzZUEiiPI|b5#igr=ZW&!Sh^GTwy>*Ur@4Ujo_?vi?47KVaqHdAR)F89e;!Cyl zQ;p`wZgcDUMdGOdnawF&SEW{~5Q`@WdURw##N&ZnZXT;r zppjW6o$SP`_)�o=^%r^yfErj3lZ^!fgT^ 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 RD1`t3002ovPDHLkV1iAHrKfromID(styleID); + + if (style == 0) + { + LOG(LINFO, ("drawTrianglesFan: styleID=", styleID, " wasn't found on current skin.")); + return; } - void AreaRenderer::endFrame() + ASSERT_GREATER_OR_EQUAL(pointsCount, 2, ()); + + float texX = style->m_texRect.minX() + 1.0f; + float texY = style->m_texRect.minY() + 1.0f; + + shared_ptr texture = skin()->page(style->m_pipelineID)->texture(); + + if (!texture) { - if (isDebugging()) - { - LOG(LINFO, ("drawing ", m_areasCount, " areas, ", m_trianglesCount, " triangles total")); - } - base_t::endFrame(); + LOG(LDEBUG, ("returning as no texture is reserved")); + return; } - void AreaRenderer::drawTrianglesFan(m2::PointF const * points, - size_t pointsCount, - uint32_t styleID, - double depth) + texture->mapPixel(texX, texY); + + m2::PointF texCoord(texX, texY); + m2::PointF normal(0, 0); + + addTexturedFanStrided(points, sizeof(m2::PointF), + &normal, 0, + &texCoord, 0, + pointsCount, + depth, + style->m_pipelineID); + } + + void AreaRenderer::drawTrianglesList(m2::PointD const * points, size_t pointsCount, uint32_t styleID, double depth) + { + ++m_areasCount; + m_trianglesCount += pointsCount / 3; + + if (!m_drawAreas) + return; + + ResourceStyle const * style = skin()->fromID(styleID); + + if (style == 0) { - ++m_areasCount; - m_trianglesCount += (pointsCount - 2); + LOG(LINFO, ("drawArea: styleID=", styleID, " wasn't found on current skin.")); + return; + } - if (!m_drawAreas) + if (!hasRoom(pointsCount, pointsCount, style->m_pipelineID)) + flush(style->m_pipelineID); + + ASSERT_GREATER_OR_EQUAL(pointsCount, 2, ()); + + float texX = style->m_texRect.minX() + 1.0f; + float texY = style->m_texRect.minY() + 1.0f; + + shared_ptr texture = skin()->page(style->m_pipelineID)->texture(); + + if (!texture) + { + LOG(LDEBUG, ("returning as no texture is reserved")); + return; + } + + texture->mapPixel(texX, texY); + + size_t pointsLeft = pointsCount; + size_t batchOffset = 0; + + while (true) + { + size_t batchSize = pointsLeft; + + int vLeft = verticesLeft(style->m_pipelineID); + int iLeft = indicesLeft(style->m_pipelineID); + + if ((vLeft == -1) || (iLeft == -1)) return; - ResourceStyle const * style = skin()->fromID(styleID); + if (batchSize > vLeft) + /// Rounding to the boundary of 3 vertices + batchSize = vLeft / 3 * 3; - if (style == 0) - { - LOG(LINFO, ("drawTrianglesFan: styleID=", styleID, " wasn't found on current skin.")); - return; - } + if (batchSize > iLeft) + batchSize = iLeft / 3 * 3; - ASSERT_GREATER_OR_EQUAL(pointsCount, 2, ()); - - float texX = style->m_texRect.minX() + 1.0f; - float texY = style->m_texRect.minY() + 1.0f; - - shared_ptr texture = skin()->page(style->m_pipelineID)->texture(); - - if (!texture) - { - LOG(LDEBUG, ("returning as no texture is reserved")); - return; - } - - texture->mapPixel(texX, texY); + bool needToFlush = (batchSize < pointsLeft); m2::PointF texCoord(texX, texY); m2::PointF normal(0, 0); - addTexturedFanStrided(points, sizeof(m2::PointF), - &normal, 0, - &texCoord, 0, - pointsCount, - depth, - style->m_pipelineID); - } + addTexturedListStrided(&points[batchOffset], sizeof(m2::PointD), + &normal, 0, + &texCoord, 0, + batchSize, + depth, + style->m_pipelineID); - void AreaRenderer::drawTrianglesList(m2::PointD const * points, size_t pointsCount, uint32_t styleID, double depth) - { - ++m_areasCount; - m_trianglesCount += pointsCount / 3; + batchOffset += batchSize; + pointsLeft -= batchSize; - if (!m_drawAreas) - return; - - ResourceStyle const * style = skin()->fromID(styleID); - - if (style == 0) - { - LOG(LINFO, ("drawArea: styleID=", styleID, " wasn't found on current skin.")); - return; - } - - if (!hasRoom(pointsCount, pointsCount, style->m_pipelineID)) + if (needToFlush) flush(style->m_pipelineID); - ASSERT_GREATER_OR_EQUAL(pointsCount, 2, ()); - - float texX = style->m_texRect.minX() + 1.0f; - float texY = style->m_texRect.minY() + 1.0f; - - shared_ptr texture = skin()->page(style->m_pipelineID)->texture(); - - if (!texture) - { - LOG(LDEBUG, ("returning as no texture is reserved")); - return; - } - - texture->mapPixel(texX, texY); - - size_t pointsLeft = pointsCount; - size_t batchOffset = 0; - - while (true) - { - size_t batchSize = pointsLeft; - - int vLeft = verticesLeft(style->m_pipelineID); - int iLeft = indicesLeft(style->m_pipelineID); - - if ((vLeft == -1) || (iLeft == -1)) - return; - - if (batchSize > vLeft) - /// Rounding to the boundary of 3 vertices - batchSize = vLeft / 3 * 3; - - if (batchSize > iLeft) - batchSize = iLeft / 3 * 3; - - bool needToFlush = (batchSize < pointsLeft); - - m2::PointF texCoord(texX, texY); - m2::PointF normal(0, 0); - - addTexturedListStrided(&points[batchOffset], sizeof(m2::PointD), - &normal, 0, - &texCoord, 0, - batchSize, - depth, - style->m_pipelineID); - - batchOffset += batchSize; - pointsLeft -= batchSize; - - if (needToFlush) - flush(style->m_pipelineID); - - if (pointsLeft == 0) - break; - } + if (pointsLeft == 0) + break; } - } } diff --git a/graphics/area_renderer.hpp b/graphics/area_renderer.hpp index 856582ed8a..31aec8eec8 100644 --- a/graphics/area_renderer.hpp +++ b/graphics/area_renderer.hpp @@ -4,41 +4,38 @@ namespace graphics { - namespace gl + class AreaRenderer : public gl::GeometryBatcher { - class AreaRenderer : public GeometryBatcher + private: + + unsigned m_trianglesCount; + unsigned m_areasCount; + bool m_drawAreas; + + public: + + typedef gl::GeometryBatcher base_t; + + struct Params : base_t::Params { - private: - - unsigned m_trianglesCount; - unsigned m_areasCount; bool m_drawAreas; - - public: - - typedef GeometryBatcher base_t; - - struct Params : base_t::Params - { - bool m_drawAreas; - Params(); - }; - - AreaRenderer(Params const & params); - - /// drawing triangles list. assuming that each 3 points compose a triangle - void drawTrianglesList(m2::PointD const * points, - size_t pointsCount, - uint32_t styleID, - double depth); - - void drawTrianglesFan(m2::PointF const * points, - size_t pointsCount, - uint32_t styleID, - double depth); - - void beginFrame(); - void endFrame(); + Params(); }; - } + + AreaRenderer(Params const & params); + + /// drawing triangles list. assuming that each 3 points compose a triangle + void drawTrianglesList(m2::PointD const * points, + size_t pointsCount, + uint32_t styleID, + double depth); + + void drawTrianglesFan(m2::PointF const * points, + size_t pointsCount, + uint32_t styleID, + double depth); + + void beginFrame(); + void endFrame(); + }; } diff --git a/graphics/graphics.pro b/graphics/graphics.pro index 2b391e915a..21f32c20f4 100644 --- a/graphics/graphics.pro +++ b/graphics/graphics.pro @@ -60,7 +60,9 @@ SOURCES += \ circle_element.cpp \ packets_queue.cpp \ display_list.cpp \ - data_formats.cpp + data_formats.cpp \ + image_info.cpp \ + image_renderer.cpp HEADERS += \ internal/opengl.hpp \ @@ -114,7 +116,9 @@ HEADERS += \ circle_element.hpp \ packets_queue.hpp \ display_list.hpp \ - data_traits.hpp + data_traits.hpp \ + image_renderer.hpp \ + image_info.hpp win32* { SOURCES += internal/opengl_win32.cpp diff --git a/graphics/graphics_tests/screengl_test.cpp b/graphics/graphics_tests/screengl_test.cpp index 8f02659a61..40a6e16de6 100644 --- a/graphics/graphics_tests/screengl_test.cpp +++ b/graphics/graphics_tests/screengl_test.cpp @@ -1,6 +1,8 @@ #include "../../base/SRC_FIRST.hpp" #include "../../3party/sgitess/interface.h" +#include "../../geometry/transformations.hpp" + #include "../../graphics/screen.hpp" #include "../../graphics/utils.hpp" #include "../../graphics/internal/opengl.hpp" @@ -1333,7 +1335,26 @@ namespace } }; - UNIT_TEST_GL(TestDrawPolyOverflow); + struct TestDrawImage + { + void DoDraw(shared_ptr const & p) + { + graphics::ImageInfo ii("test.png"); + + math::Matrix m = + math::Shift( + math::Rotate( + math::Identity(), + math::pi / 4), + 100, 100); + + p->drawImage(m, + p->skin()->mapImageInfo(ii), + graphics::maxDepth); + } + }; + +/* UNIT_TEST_GL(TestDrawPolyOverflow); UNIT_TEST_GL(TestDrawText); UNIT_TEST_GL(TestDrawSingleSymbol); UNIT_TEST_GL(TestDrawEmptySymbol); @@ -1373,5 +1394,6 @@ namespace UNIT_TEST_GL(TestDrawUtilsRect); UNIT_TEST_GL(TestDrawUtilsRectFilledTexture); UNIT_TEST_GL(TestDrawSymbolFiltering); - UNIT_TEST_GL(TestDrawCircle); + UNIT_TEST_GL(TestDrawCircle);*/ + UNIT_TEST_GL(TestDrawImage); } diff --git a/graphics/graphics_tests/shape_renderer_test.cpp b/graphics/graphics_tests/shape_renderer_test.cpp index 878882487c..a5a68d97ab 100644 --- a/graphics/graphics_tests/shape_renderer_test.cpp +++ b/graphics/graphics_tests/shape_renderer_test.cpp @@ -2,7 +2,7 @@ #include "../shape_renderer.hpp" #include "../../base/math.hpp" -using namespace graphics::gl; +using namespace graphics; namespace { diff --git a/graphics/image_info.cpp b/graphics/image_info.cpp new file mode 100644 index 0000000000..3449b40552 --- /dev/null +++ b/graphics/image_info.cpp @@ -0,0 +1,53 @@ +#include "image_info.hpp" +#include "data_traits.hpp" + +#include "../platform/platform.hpp" + +#include "../coding/lodepng_io.hpp" + +namespace gil = boost::gil; + +namespace graphics +{ + m2::PointU const GetDimensions(string const & resourceName) + { + ReaderPtr reader = GetPlatform().GetReader(resourceName); + gil::point2 size = gil::lodepng_read_dimensions(reader); + return m2::PointU(size.x, size.y); + } + + ImageInfo::ImageInfo(char const * resourceName) + { + m_size = GetDimensions(resourceName); + m_data.resize(m_size.x * m_size.y * sizeof(DATA_TRAITS::pixel_t)); + + DATA_TRAITS::view_t v = gil::interleaved_view( + m_size.x, m_size.y, + (DATA_TRAITS::pixel_t*)&m_data[0], + m_size.x * sizeof(DATA_TRAITS::pixel_t)); + + ReaderPtr reader = GetPlatform().GetReader(resourceName); + + gil::lodepng_read_and_convert_view(reader, v, DATA_TRAITS::color_converter()); + } + + unsigned ImageInfo::width() const + { + return m_size.x; + } + + unsigned ImageInfo::height() const + { + return m_size.y; + } + + unsigned char const * ImageInfo::data() const + { + return &m_data[0]; + } + + bool operator<(ImageInfo const & l, ImageInfo const & r) + { + return l.m_resourceName < r.m_resourceName; + } +} diff --git a/graphics/image_info.hpp b/graphics/image_info.hpp new file mode 100644 index 0000000000..eba2440964 --- /dev/null +++ b/graphics/image_info.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include "../std/string.hpp" + +#include "../geometry/point2d.hpp" + +namespace graphics +{ + /// get dimensions of PNG image specified by it's resourceName. + m2::PointU const GetDimensions(string const & resourceName); + + class ImageInfo + { + private: + vector m_data; + m2::PointU m_size; + string m_resourceName; + public: + /// create ImageInfo from PNG resource + ImageInfo(char const * resourceName); + + unsigned width() const; + unsigned height() const; + + unsigned char const * data() const; + + friend bool operator < (ImageInfo const & l, ImageInfo const & r); + }; + + bool operator < (ImageInfo const & l, ImageInfo const & r); +} diff --git a/graphics/image_renderer.cpp b/graphics/image_renderer.cpp new file mode 100644 index 0000000000..b928b4ba0e --- /dev/null +++ b/graphics/image_renderer.cpp @@ -0,0 +1,67 @@ +#include "image_renderer.hpp" + +#include "base_texture.hpp" +#include "resource_style.hpp" +#include "skin.hpp" + +#include "../base/assert.hpp" +#include "../base/macros.hpp" + +namespace graphics +{ + ImageRenderer::ImageRenderer(base_t::Params const & p) + : base_t(p) + {} + + void ImageRenderer::drawImage(math::Matrix const & m, + uint32_t styleID, + double depth) + { + ResourceStyle const * style(skin()->fromID(styleID)); + + if (style == 0) + { + LOG(LINFO, ("drawImage: styleID=", styleID, "wasn't found on current skin")); + return; + } + + ASSERT(style->m_cat == ResourceStyle::EImageStyle, ()); + + m2::RectI texRect(style->m_texRect); + texRect.Inflate(-1, -1); + + m2::PointF pts[6] = + { + m2::PointF(m2::PointD(-1, -1) * m), + m2::PointF(m2::PointD(texRect.SizeX() - 1, -1) * m), + m2::PointF(m2::PointD(texRect.SizeX() - 1, texRect.SizeY() - 1) * m), + m2::PointF(m2::PointD(texRect.SizeX() - 1, texRect.SizeY() - 1) * m), + m2::PointF(m2::PointD(-1, texRect.SizeY() - 1) * m), + m2::PointF(m2::PointD(-1, -1) * m) + }; + + shared_ptr const & texture = skin()->page(style->m_pipelineID)->texture(); + + m2::PointF texPts[6] = + { + m2::PointF(texRect.minX(), texRect.minY()), + m2::PointF(texRect.maxX(), texRect.minY()), + m2::PointF(texRect.maxX(), texRect.maxY()), + m2::PointF(texRect.maxX(), texRect.maxY()), + m2::PointF(texRect.minX(), texRect.maxY()), + m2::PointF(texRect.minX(), texRect.minY()) + }; + + for (unsigned i = 0; i < ARRAY_SIZE(texPts); ++i) + texture->mapPixel(texPts[i].x, texPts[i].y); + + m2::PointF normal(0, 0); + + addTexturedListStrided(pts, sizeof(m2::PointF), + &normal, 0, + texPts, sizeof(m2::PointF), + 6, + depth, + style->m_pipelineID); + } +} diff --git a/graphics/image_renderer.hpp b/graphics/image_renderer.hpp new file mode 100644 index 0000000000..8956deeac7 --- /dev/null +++ b/graphics/image_renderer.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include "shape_renderer.hpp" +#include "defines.hpp" + +namespace graphics +{ + class ImageRenderer : public ShapeRenderer + { + private: + public: + + typedef ShapeRenderer base_t; + + ImageRenderer(base_t::Params const & p); + + void drawImage(math::Matrix const & m, + uint32_t styleID, + double depth); + }; +} diff --git a/graphics/path_renderer.cpp b/graphics/path_renderer.cpp index 2e6c78988e..46b75f2434 100644 --- a/graphics/path_renderer.cpp +++ b/graphics/path_renderer.cpp @@ -8,94 +8,183 @@ namespace graphics { - namespace gl + PathRenderer::Params::Params() + : m_drawPathes(true), + m_fastSolidPath(true) + {} + + PathRenderer::PathRenderer(Params const & params) + : base_t(params), + m_drawPathes(params.m_drawPathes), + m_fastSolidPath(params.m_fastSolidPath) + {} + + void PathRenderer::drawPath(m2::PointD const * points, size_t pointsCount, double offset, uint32_t styleID, double depth) { - PathRenderer::Params::Params() - : m_drawPathes(true), - m_fastSolidPath(true) - {} + ++m_pathCount; + m_pointsCount += pointsCount; - PathRenderer::PathRenderer(Params const & params) - : base_t(params), - m_drawPathes(params.m_drawPathes), - m_fastSolidPath(params.m_fastSolidPath) - {} + if (!m_drawPathes) + return; - void PathRenderer::drawPath(m2::PointD const * points, size_t pointsCount, double offset, uint32_t styleID, double depth) + ASSERT_GREATER_OR_EQUAL(pointsCount, 2, ()); + ASSERT_NOT_EQUAL(styleID, uint32_t(-1), ()); + + ResourceStyle const * style(skin()->fromID(styleID)); + if (style == 0) { - ++m_pathCount; - m_pointsCount += pointsCount; + LOG(LINFO, ("drawPath: styleID=", styleID, " wasn't found on current skin")); + return; + } - if (!m_drawPathes) - return; + ASSERT(style->m_cat == ResourceStyle::ELineStyle, ()); - ASSERT_GREATER_OR_EQUAL(pointsCount, 2, ()); - ASSERT_NOT_EQUAL(styleID, uint32_t(-1), ()); + LineStyle const * lineStyle = static_cast(style); + if (m_fastSolidPath && lineStyle->m_isSolid) + { + drawFastSolidPath(points, pointsCount, styleID, depth); + return; + } - ResourceStyle const * style(skin()->fromID(styleID)); - if (style == 0) + float rawTileStartLen = 0; + + float rawTileLen = (float)lineStyle->rawTileLen(); + + if ((offset < 0) && (!lineStyle->m_isWrapped)) + offset = offset - rawTileLen * ceil(offset / rawTileLen); + + bool skipToOffset = true; + + for (size_t i = 0; i < pointsCount - 1; ++i) + { + m2::PointD dir = points[i + 1] - points[i]; + dir *= 1.0 / dir.Length(m2::PointD(0, 0)); + m2::PointD norm(-dir.y, dir.x); + + /// The length of the current segment. + float segLen = points[i + 1].Length(points[i]); + /// The remaining length of the segment + float segLenRemain = segLen; + + if (skipToOffset) { - LOG(LINFO, ("drawPath: styleID=", styleID, " wasn't found on current skin")); - return; - } - - ASSERT(style->m_cat == ResourceStyle::ELineStyle, ()); - - LineStyle const * lineStyle = static_cast(style); - if (m_fastSolidPath && lineStyle->m_isSolid) - { - drawFastSolidPath(points, pointsCount, styleID, depth); - return; - } - - float rawTileStartLen = 0; - - float rawTileLen = (float)lineStyle->rawTileLen(); - - if ((offset < 0) && (!lineStyle->m_isWrapped)) - offset = offset - rawTileLen * ceil(offset / rawTileLen); - - bool skipToOffset = true; - - for (size_t i = 0; i < pointsCount - 1; ++i) - { - m2::PointD dir = points[i + 1] - points[i]; - dir *= 1.0 / dir.Length(m2::PointD(0, 0)); - m2::PointD norm(-dir.y, dir.x); - - /// The length of the current segment. - float segLen = points[i + 1].Length(points[i]); - /// The remaining length of the segment - float segLenRemain = segLen; - - if (skipToOffset) + offset -= segLen; + if (offset >= 0) + continue; + else { - offset -= segLen; - if (offset >= 0) - continue; - else - { - skipToOffset = false; - segLenRemain = -offset; - } + skipToOffset = false; + segLenRemain = -offset; + } + } + + /// Geometry width. It's 1px wider than the pattern width. + int geomWidth = static_cast(lineStyle->m_penInfo.m_w) + 4 - 2 * aaShift(); + float geomHalfWidth = geomWidth / 2.0; + + /// Starting point of the tiles on this segment + m2::PointF rawTileStartPt = points[i] + dir * (segLen - segLenRemain); + + /// Tiling procedes as following : + /// The leftmost tile goes antialiased at left and non-antialiased at right. + /// The inner tiles goes non-antialiased at both sides. + /// The rightmost tile goes non-antialised at left and antialiased at right side. + + /// Length of the actual pattern data being tiling(without antialiasing zones). + rawTileLen = 0; + + shared_ptr texture = skin()->page(lineStyle->m_pipelineID)->texture(); + + if (!texture) + { + LOG(LDEBUG, ("returning as no texture is reserved")); + return; + } + + float texMaxY = lineStyle->m_texRect.maxY() - aaShift(); + float texMinY = lineStyle->m_texRect.minY() + aaShift(); + + m2::PointF const fNorm = norm * geomHalfWidth; // enough to calc it once + + while (segLenRemain > 0) + { + rawTileLen = lineStyle->m_isWrapped + ? segLen + : std::min(((float)lineStyle->rawTileLen() - rawTileStartLen), segLenRemain); + + + float texMinX = lineStyle->m_isWrapped ? 0 : lineStyle->m_texRect.minX() + 2 + rawTileStartLen; + float texMaxX = texMinX + rawTileLen; + + rawTileStartLen += rawTileLen; + if (rawTileStartLen >= lineStyle->rawTileLen()) + rawTileStartLen -= lineStyle->rawTileLen(); + ASSERT(rawTileStartLen < lineStyle->rawTileLen(), ()); + + m2::PointF rawTileEndPt(rawTileStartPt.x + dir.x * rawTileLen, rawTileStartPt.y + dir.y * rawTileLen); + + m2::PointF coords[4] = + { + // vng: i think this "rawTileStartPt + fNorm" reading better, isn't it? + m2::PointF(rawTileStartPt.x + fNorm.x, rawTileStartPt.y + fNorm.y), + m2::PointF(rawTileStartPt.x - fNorm.x, rawTileStartPt.y - fNorm.y), + m2::PointF(rawTileEndPt.x - fNorm.x, rawTileEndPt.y - fNorm.y), + m2::PointF(rawTileEndPt.x + fNorm.x, rawTileEndPt.y + fNorm.y) + }; + + m2::PointF texCoords[4] = + { + texture->mapPixel(m2::PointF(texMinX, texMinY)), + texture->mapPixel(m2::PointF(texMinX, texMaxY)), + texture->mapPixel(m2::PointF(texMaxX, texMaxY)), + texture->mapPixel(m2::PointF(texMaxX, texMinY)) + }; + + m2::PointF normals[4] = + { + m2::PointF(0, 0), + m2::PointF(0, 0), + m2::PointF(0, 0), + m2::PointF(0, 0) + }; + + addTexturedFan(coords, normals, texCoords, 4, depth, lineStyle->m_pipelineID); + + segLenRemain -= rawTileLen; + + rawTileStartPt = rawTileEndPt; + } + + bool isColorJoin = lineStyle->m_isSolid ? true : lineStyle->m_penInfo.atDashOffset(rawTileLen); + + /// Adding geometry for a line join between previous and current segment. + if ((i != pointsCount - 2) && (isColorJoin)) + { + m2::PointD nextDir = points[i + 2] - points[i + 1]; + nextDir *= 1.0 / nextDir.Length(m2::PointD(0, 0)); + m2::PointD nextNorm(-nextDir.y, nextDir.x); + + /// Computing the sin of angle between directions. + double alphaSin = dir.x * nextDir.y - dir.y * nextDir.x; + double alphaCos = dir.x * nextDir.x + dir.y * nextDir.y; + double alpha = atan2(alphaSin, alphaCos); + int angleSegCount = int(ceil(fabs(alpha) / (math::pi / 6))); + double angleStep = alpha / angleSegCount; + + m2::PointD startVec; + + if (alpha > 0) + { + /// The outer site is on the prevNorm direction. + startVec = -norm; + } + else + { + /// The outer site is on the -prevNorm direction + startVec = norm; } - /// Geometry width. It's 1px wider than the pattern width. - int geomWidth = static_cast(lineStyle->m_penInfo.m_w) + 4 - 2 * aaShift(); - float geomHalfWidth = geomWidth / 2.0; - - /// Starting point of the tiles on this segment - m2::PointF rawTileStartPt = points[i] + dir * (segLen - segLenRemain); - - /// Tiling procedes as following : - /// The leftmost tile goes antialiased at left and non-antialiased at right. - /// The inner tiles goes non-antialiased at both sides. - /// The rightmost tile goes non-antialised at left and antialiased at right side. - - /// Length of the actual pattern data being tiling(without antialiasing zones). - rawTileLen = 0; - - shared_ptr texture = skin()->page(lineStyle->m_pipelineID)->texture(); + shared_ptr texture = skin()->page(lineStyle->m_pipelineID)->texture(); if (!texture) { @@ -103,225 +192,133 @@ namespace graphics return; } - float texMaxY = lineStyle->m_texRect.maxY() - aaShift(); - float texMinY = lineStyle->m_texRect.minY() + aaShift(); - - m2::PointF const fNorm = norm * geomHalfWidth; // enough to calc it once - - while (segLenRemain > 0) + m2::PointF joinSegTex[3] = { - rawTileLen = lineStyle->m_isWrapped - ? segLen - : std::min(((float)lineStyle->rawTileLen() - rawTileStartLen), segLenRemain); + texture->mapPixel(lineStyle->m_centerColorPixel), + texture->mapPixel(lineStyle->m_borderColorPixel), + texture->mapPixel(lineStyle->m_borderColorPixel) + }; + m2::PointD prevStartVec = startVec; + for (int j = 0; j < angleSegCount; ++j) + { + /// Rotate start vector to find another point on a join. + startVec.Rotate(angleStep); - float texMinX = lineStyle->m_isWrapped ? 0 : lineStyle->m_texRect.minX() + 2 + rawTileStartLen; - float texMaxX = texMinX + rawTileLen; - - rawTileStartLen += rawTileLen; - if (rawTileStartLen >= lineStyle->rawTileLen()) - rawTileStartLen -= lineStyle->rawTileLen(); - ASSERT(rawTileStartLen < lineStyle->rawTileLen(), ()); - - m2::PointF rawTileEndPt(rawTileStartPt.x + dir.x * rawTileLen, rawTileStartPt.y + dir.y * rawTileLen); - - m2::PointF coords[4] = + /// Computing three points of a join segment. + m2::PointF joinSeg[3] = { - // vng: i think this "rawTileStartPt + fNorm" reading better, isn't it? - m2::PointF(rawTileStartPt.x + fNorm.x, rawTileStartPt.y + fNorm.y), - m2::PointF(rawTileStartPt.x - fNorm.x, rawTileStartPt.y - fNorm.y), - m2::PointF(rawTileEndPt.x - fNorm.x, rawTileEndPt.y - fNorm.y), - m2::PointF(rawTileEndPt.x + fNorm.x, rawTileEndPt.y + fNorm.y) + m2::PointF(points[i + 1]), + m2::PointF(points[i + 1] + startVec * geomHalfWidth), + m2::PointF(points[i + 1] + prevStartVec * geomHalfWidth) }; - m2::PointF texCoords[4] = + m2::PointF joinSegNormals[3] = { - texture->mapPixel(m2::PointF(texMinX, texMinY)), - texture->mapPixel(m2::PointF(texMinX, texMaxY)), - texture->mapPixel(m2::PointF(texMaxX, texMaxY)), - texture->mapPixel(m2::PointF(texMaxX, texMinY)) - }; - - m2::PointF normals[4] = - { - m2::PointF(0, 0), m2::PointF(0, 0), m2::PointF(0, 0), m2::PointF(0, 0) }; - addTexturedFan(coords, normals, texCoords, 4, depth, lineStyle->m_pipelineID); + addTexturedFan(joinSeg, joinSegNormals, joinSegTex, 3, depth, lineStyle->m_pipelineID); - segLenRemain -= rawTileLen; - - rawTileStartPt = rawTileEndPt; - } - - bool isColorJoin = lineStyle->m_isSolid ? true : lineStyle->m_penInfo.atDashOffset(rawTileLen); - - /// Adding geometry for a line join between previous and current segment. - if ((i != pointsCount - 2) && (isColorJoin)) - { - m2::PointD nextDir = points[i + 2] - points[i + 1]; - nextDir *= 1.0 / nextDir.Length(m2::PointD(0, 0)); - m2::PointD nextNorm(-nextDir.y, nextDir.x); - - /// Computing the sin of angle between directions. - double alphaSin = dir.x * nextDir.y - dir.y * nextDir.x; - double alphaCos = dir.x * nextDir.x + dir.y * nextDir.y; - double alpha = atan2(alphaSin, alphaCos); - int angleSegCount = int(ceil(fabs(alpha) / (math::pi / 6))); - double angleStep = alpha / angleSegCount; - - m2::PointD startVec; - - if (alpha > 0) - { - /// The outer site is on the prevNorm direction. - startVec = -norm; - } - else - { - /// The outer site is on the -prevNorm direction - startVec = norm; - } - - shared_ptr texture = skin()->page(lineStyle->m_pipelineID)->texture(); - - if (!texture) - { - LOG(LDEBUG, ("returning as no texture is reserved")); - return; - } - - m2::PointF joinSegTex[3] = - { - texture->mapPixel(lineStyle->m_centerColorPixel), - texture->mapPixel(lineStyle->m_borderColorPixel), - texture->mapPixel(lineStyle->m_borderColorPixel) - }; - - m2::PointD prevStartVec = startVec; - for (int j = 0; j < angleSegCount; ++j) - { - /// Rotate start vector to find another point on a join. - startVec.Rotate(angleStep); - - /// Computing three points of a join segment. - m2::PointF joinSeg[3] = - { - m2::PointF(points[i + 1]), - m2::PointF(points[i + 1] + startVec * geomHalfWidth), - m2::PointF(points[i + 1] + prevStartVec * geomHalfWidth) - }; - - m2::PointF joinSegNormals[3] = - { - m2::PointF(0, 0), - m2::PointF(0, 0), - m2::PointF(0, 0) - }; - - addTexturedFan(joinSeg, joinSegNormals, joinSegTex, 3, depth, lineStyle->m_pipelineID); - - prevStartVec = startVec; - } + prevStartVec = startVec; } } } + } - void PathRenderer::drawFastSolidPath(m2::PointD const * points, size_t pointsCount, uint32_t styleID, double depth) + void PathRenderer::drawFastSolidPath(m2::PointD const * points, size_t pointsCount, uint32_t styleID, double depth) + { + ASSERT_GREATER_OR_EQUAL(pointsCount, 2, ()); + ResourceStyle const * style(skin()->fromID(styleID)); + + ASSERT(style->m_cat == ResourceStyle::ELineStyle, ()); + LineStyle const * lineStyle = static_cast(style); + + ASSERT(lineStyle->m_isSolid, ()); + + for (size_t i = 0; i < pointsCount - 1; ++i) { - ASSERT_GREATER_OR_EQUAL(pointsCount, 2, ()); - ResourceStyle const * style(skin()->fromID(styleID)); + m2::PointD dir = points[i + 1] - points[i]; + double len = dir.Length(m2::PointD(0, 0)); + dir *= 1.0 / len; + m2::PointD norm(-dir.y, dir.x); + m2::PointD const & nextPt = points[i + 1]; - ASSERT(style->m_cat == ResourceStyle::ELineStyle, ()); - LineStyle const * lineStyle = static_cast(style); + float geomHalfWidth = (lineStyle->m_penInfo.m_w + 4 - aaShift() * 2) / 2.0; - ASSERT(lineStyle->m_isSolid, ()); + float texMinX = lineStyle->m_texRect.minX() + 1; + float texMaxX = lineStyle->m_texRect.maxX() - 1; - for (size_t i = 0; i < pointsCount - 1; ++i) + float texMinY = lineStyle->m_texRect.maxY() - aaShift(); + float texMaxY = lineStyle->m_texRect.minY() + aaShift(); + + float texCenterX = (texMinX + texMaxX) / 2; + + m2::PointF const fNorm = norm * geomHalfWidth; // enough to calc it once + m2::PointF const fDir(fNorm.y, -fNorm.x); + + m2::PointF coords[8] = { - m2::PointD dir = points[i + 1] - points[i]; - double len = dir.Length(m2::PointD(0, 0)); - dir *= 1.0 / len; - m2::PointD norm(-dir.y, dir.x); - m2::PointD const & nextPt = points[i + 1]; + /// left round cap + points[i] - fDir + fNorm, + points[i] - fDir - fNorm, + points[i] + fNorm, + /// inner part + points[i] - fNorm, + nextPt + fNorm, + nextPt - fNorm, + /// right round cap + nextPt + fDir + fNorm, + nextPt + fDir - fNorm + }; - float geomHalfWidth = (lineStyle->m_penInfo.m_w + 4 - aaShift() * 2) / 2.0; + shared_ptr texture = skin()->page(lineStyle->m_pipelineID)->texture(); - float texMinX = lineStyle->m_texRect.minX() + 1; - float texMaxX = lineStyle->m_texRect.maxX() - 1; - - float texMinY = lineStyle->m_texRect.maxY() - aaShift(); - float texMaxY = lineStyle->m_texRect.minY() + aaShift(); - - float texCenterX = (texMinX + texMaxX) / 2; - - m2::PointF const fNorm = norm * geomHalfWidth; // enough to calc it once - m2::PointF const fDir(fNorm.y, -fNorm.x); - - m2::PointF coords[8] = - { - /// left round cap - points[i] - fDir + fNorm, - points[i] - fDir - fNorm, - points[i] + fNorm, - /// inner part - points[i] - fNorm, - nextPt + fNorm, - nextPt - fNorm, - /// right round cap - nextPt + fDir + fNorm, - nextPt + fDir - fNorm - }; - - shared_ptr texture = skin()->page(lineStyle->m_pipelineID)->texture(); - - if (!texture) - { - LOG(LDEBUG, ("returning as no texture is reserved")); - return; - } - - m2::PointF texCoords[8] = - { - texture->mapPixel(m2::PointF(texMinX, texMinY)), - texture->mapPixel(m2::PointF(texMinX, texMaxY)), - texture->mapPixel(m2::PointF(texCenterX, texMinY)), - texture->mapPixel(m2::PointF(texCenterX, texMaxY)), - texture->mapPixel(m2::PointF(texCenterX, texMinY)), - texture->mapPixel(m2::PointF(texCenterX, texMaxY)), - texture->mapPixel(m2::PointF(texMaxX, texMinY)), - texture->mapPixel(m2::PointF(texMaxX, texMaxY)) - }; - - m2::PointF normal(0, 0); - - addTexturedStripStrided(coords, sizeof(m2::PointF), - &normal, 0, - texCoords, sizeof(m2::PointF), - 8, - depth, - lineStyle->m_pipelineID); - } - } - - void PathRenderer::beginFrame() - { - base_t::beginFrame(); - m_pathCount = 0; - m_pointsCount = 0; - } - - void PathRenderer::endFrame() - { - if (isDebugging()) + if (!texture) { - LOG(LINFO, ("drawing ", m_pathCount, " pathes, ", m_pointsCount, " points total")); + LOG(LDEBUG, ("returning as no texture is reserved")); + return; } - base_t::endFrame(); + + m2::PointF texCoords[8] = + { + texture->mapPixel(m2::PointF(texMinX, texMinY)), + texture->mapPixel(m2::PointF(texMinX, texMaxY)), + texture->mapPixel(m2::PointF(texCenterX, texMinY)), + texture->mapPixel(m2::PointF(texCenterX, texMaxY)), + texture->mapPixel(m2::PointF(texCenterX, texMinY)), + texture->mapPixel(m2::PointF(texCenterX, texMaxY)), + texture->mapPixel(m2::PointF(texMaxX, texMinY)), + texture->mapPixel(m2::PointF(texMaxX, texMaxY)) + }; + + m2::PointF normal(0, 0); + + addTexturedStripStrided(coords, sizeof(m2::PointF), + &normal, 0, + texCoords, sizeof(m2::PointF), + 8, + depth, + lineStyle->m_pipelineID); } } + + void PathRenderer::beginFrame() + { + base_t::beginFrame(); + m_pathCount = 0; + m_pointsCount = 0; + } + + void PathRenderer::endFrame() + { + if (isDebugging()) + { + LOG(LINFO, ("drawing ", m_pathCount, " pathes, ", m_pointsCount, " points total")); + } + base_t::endFrame(); + } } diff --git a/graphics/path_renderer.hpp b/graphics/path_renderer.hpp index 648865ecf7..6f2c43be13 100644 --- a/graphics/path_renderer.hpp +++ b/graphics/path_renderer.hpp @@ -5,36 +5,33 @@ namespace graphics { - namespace gl + class PathRenderer : public AreaRenderer { - class PathRenderer : public AreaRenderer - { - private: + private: - unsigned m_pathCount; - unsigned m_pointsCount; + unsigned m_pathCount; + unsigned m_pointsCount; + bool m_drawPathes; + bool m_fastSolidPath; + + void drawFastSolidPath(m2::PointD const * points, size_t pointsCount, uint32_t styleID, double depth); + + public: + + typedef AreaRenderer base_t; + + struct Params : base_t::Params + { bool m_drawPathes; bool m_fastSolidPath; - - void drawFastSolidPath(m2::PointD const * points, size_t pointsCount, uint32_t styleID, double depth); - - public: - - typedef AreaRenderer base_t; - - struct Params : base_t::Params - { - bool m_drawPathes; - bool m_fastSolidPath; - Params(); - }; - - PathRenderer(Params const & params); - - void drawPath(m2::PointD const * points, size_t pointsCount, double offset, uint32_t styleID, double depth); - - void beginFrame(); - void endFrame(); + Params(); }; - } + + PathRenderer(Params const & params); + + void drawPath(m2::PointD const * points, size_t pointsCount, double offset, uint32_t styleID, double depth); + + void beginFrame(); + void endFrame(); + }; } diff --git a/graphics/pen_info.hpp b/graphics/pen_info.hpp index b1645b668d..0911011dcc 100644 --- a/graphics/pen_info.hpp +++ b/graphics/pen_info.hpp @@ -8,11 +8,11 @@ namespace graphics { - /// definition of the line style pattern used as a texture-cache-key + /// definition of the line style pattern + /// used as a texture-cache-key struct PenInfo { typedef buffer_vector TPattern; -// typedef vector TPattern; Color m_color; double m_w; TPattern m_pat; diff --git a/graphics/resource_style.cpp b/graphics/resource_style.cpp index 5b243da76a..78ac1f883c 100644 --- a/graphics/resource_style.cpp +++ b/graphics/resource_style.cpp @@ -60,4 +60,48 @@ namespace graphics for (size_t x = 0; x < r.SizeX(); ++x) v(x, y) = px; } + + ImageStyle::ImageStyle(m2::RectU const & texRect, + int pipelineID, + ImageInfo const & ii) + : ResourceStyle(EImageStyle, texRect, pipelineID), + m_ii(ii) + {} + + void ImageStyle::render(void * dst) + { + m2::RectU const & r = m_texRect; + + DATA_TRAITS::view_t dstV = gil::interleaved_view( + r.SizeX(), r.SizeY(), + (DATA_TRAITS::pixel_t*)dst, + sizeof(DATA_TRAITS::pixel_t) * r.SizeX() + ); + + DATA_TRAITS::view_t srcV = gil::interleaved_view( + r.SizeX() - 4, r.SizeY() - 4, + (DATA_TRAITS::pixel_t*)m_ii.data(), + sizeof(DATA_TRAITS::pixel_t) * (r.SizeX() - 4) + ); + + DATA_TRAITS::pixel_t borderPixel = DATA_TRAITS::createPixel(Color(255, 0, 0, 255)); + + for (unsigned y = 0; y < 2; ++y) + { + dstV(0, y) = borderPixel; + dstV(1, y) = borderPixel; + dstV(r.SizeX() - 2, y) = borderPixel; + dstV(r.SizeX() - 1, y) = borderPixel; + } + + for (unsigned y = r.SizeY() - 2; y < r.SizeY(); ++y) + { + dstV(0, y) = borderPixel; + dstV(1, y) = borderPixel; + dstV(r.SizeX() - 2, y) = borderPixel; + dstV(r.SizeX() - 1, y) = borderPixel; + } + + gil::copy_pixels(srcV, gil::subimage_view(dstV, 2, 2, r.SizeX() - 4, r.SizeY() - 4)); + } } diff --git a/graphics/resource_style.hpp b/graphics/resource_style.hpp index ed17b5f79b..75e4bade8e 100644 --- a/graphics/resource_style.hpp +++ b/graphics/resource_style.hpp @@ -2,6 +2,7 @@ #include "pen_info.hpp" #include "circle_info.hpp" +#include "image_info.hpp" #include "../geometry/rect2d.hpp" @@ -20,6 +21,7 @@ namespace graphics EGlyphStyle, EPointStyle, ECircleStyle, + EImageStyle, EUnknownStyle }; @@ -28,23 +30,29 @@ namespace graphics int m_pipelineID; ResourceStyle(); - ResourceStyle(m2::RectU const & texRect, int pipelineID); + ResourceStyle(m2::RectU const & texRect, + int pipelineID); virtual ~ResourceStyle(); virtual void render(void * dst) = 0; protected: - ResourceStyle(Category cat, m2::RectU const & texRect, int pipelineID); + ResourceStyle(Category cat, + m2::RectU const & texRect, + int pipelineID); }; struct LineStyle : public ResourceStyle { bool m_isWrapped; bool m_isSolid; - graphics::PenInfo m_penInfo; + PenInfo m_penInfo; m2::PointU m_centerColorPixel; m2::PointU m_borderColorPixel; - LineStyle(bool isWrapped, m2::RectU const & texRect, int pipelineID, graphics::PenInfo const & penInfo); + LineStyle(bool isWrapped, + m2::RectU const & texRect, + int pipelineID, + PenInfo const & penInfo); /// with antialiasing zones double geometryTileLen() const; @@ -60,7 +68,9 @@ namespace graphics struct GlyphStyle : public ResourceStyle { shared_ptr m_gi; - GlyphStyle(m2::RectU const & texRect, int pipelineID, shared_ptr const & gi); + GlyphStyle(m2::RectU const & texRect, + int pipelineID, + shared_ptr const & gi); void render(void * dst); }; @@ -68,23 +78,39 @@ namespace graphics struct PointStyle : public ResourceStyle { string m_styleName; - PointStyle(m2::RectU const & texRect, int pipelineID, string const & styleName); + PointStyle(m2::RectU const & texRect, + int pipelineID, + string const & styleName); void render(void * dst); }; struct CircleStyle : public ResourceStyle { - graphics::CircleInfo m_ci; - CircleStyle(m2::RectU const & texRect, int pipelineID, graphics::CircleInfo const & ci); + CircleInfo m_ci; + CircleStyle(m2::RectU const & texRect, + int pipelineID, + CircleInfo const & ci); void render(void * dst); }; struct ColorStyle : public ResourceStyle { - graphics::Color m_c; - ColorStyle(m2::RectU const & texRect, int pipelineID, graphics::Color const & c); + Color m_c; + ColorStyle(m2::RectU const & texRect, + int pipelineID, + Color const & c); + + void render(void * dst); + }; + + struct ImageStyle : public ResourceStyle + { + ImageInfo m_ii; + ImageStyle(m2::RectU const & texRect, + int pipelineID, + ImageInfo const & ii); void render(void * dst); }; diff --git a/graphics/shape_renderer.cpp b/graphics/shape_renderer.cpp index fbeec593d1..860dddaf89 100644 --- a/graphics/shape_renderer.cpp +++ b/graphics/shape_renderer.cpp @@ -11,159 +11,157 @@ namespace graphics { - namespace gl + ShapeRenderer::ShapeRenderer(base_t::Params const & params) : base_t(params) { - ShapeRenderer::ShapeRenderer(base_t::Params const & params) : base_t(params) + } + + void ShapeRenderer::drawConvexPolygon(m2::PointF const * pts, size_t ptsCount, graphics::Color const & color, double depth) + { + uint32_t styleID = skin()->mapColor(color); + + if (styleID == skin()->invalidHandle()) { + LOG(LINFO, ("cannot map color")); + return; } - void ShapeRenderer::drawConvexPolygon(m2::PointF const * pts, size_t ptsCount, graphics::Color const & color, double depth) + drawTrianglesFan(pts, ptsCount, styleID, depth); + } + + void ShapeRenderer::drawArc(m2::PointD const & center, double startA, double endA, double r, graphics::Color const & c, double depth) + { + vector pts; + approximateArc(center, startA, endA, r, pts); + + if (pts.size() < 2) + return; + + drawPath(&pts[0], pts.size(), 0, skin()->mapPenInfo(graphics::PenInfo(c, 3, 0, 0, 0)), depth); + } + + void ShapeRenderer::approximateArc(m2::PointD const & center, double startA, double endA, double r, vector & pts) + { + double sectorA = math::pi / 30.0; + size_t const sectorsCount = static_cast(floor(fabs(endA - startA) / sectorA)); + sectorA = (endA - startA) / sectorsCount; + + for (size_t i = 0; i <= sectorsCount; ++i) + pts.push_back(m2::Shift(m2::Rotate(m2::PointD(r, 0), startA + i * sectorA), center)); + } + + void ShapeRenderer::drawSector(m2::PointD const & center, double startA, double endA, double r, graphics::Color const & c, double depth) + { + vector pts; + + pts.push_back(center); + approximateArc(center, startA, endA, r, pts); + pts.push_back(center); + + if (pts.size() < 3) + return; + + drawPath(&pts[0], pts.size(), 0, skin()->mapPenInfo(graphics::PenInfo(c, 2, 0, 0, 0)), depth); + } + + void ShapeRenderer::fillSector(m2::PointD const & center, double startA, double endA, double r, graphics::Color const & c, double depth) + { + vector arcPts; + + arcPts.push_back(center); + approximateArc(center, startA, endA, r, arcPts); + + if (arcPts.size() < 3) + return; + + m2::PointD pt0 = arcPts[0]; + m2::PointD pt1 = arcPts[1]; + + vector sectorPts; + + for (size_t i = 2; i < arcPts.size(); ++i) { - uint32_t styleID = skin()->mapColor(color); - - if (styleID == skin()->invalidHandle()) - { - LOG(LINFO, ("cannot map color")); - return; - } - - drawTrianglesFan(pts, ptsCount, styleID, depth); + sectorPts.push_back(pt0); + sectorPts.push_back(pt1); + sectorPts.push_back(arcPts[i]); + pt1 = arcPts[i]; } - void ShapeRenderer::drawArc(m2::PointD const & center, double startA, double endA, double r, graphics::Color const & c, double depth) + drawTrianglesList(§orPts[0], sectorPts.size(), skin()->mapColor(c), depth); + } + + void ShapeRenderer::drawRectangle(m2::AnyRectD const & r, graphics::Color const & c, double depth) + { + ResourceStyle const * style = skin()->fromID(skin()->mapColor(c)); + + if (style == 0) { - vector pts; - approximateArc(center, startA, endA, r, pts); - - if (pts.size() < 2) - return; - - drawPath(&pts[0], pts.size(), 0, skin()->mapPenInfo(graphics::PenInfo(c, 3, 0, 0, 0)), depth); + LOG(LINFO, ("cannot map color")); + return; } - void ShapeRenderer::approximateArc(m2::PointD const & center, double startA, double endA, double r, vector & pts) - { - double sectorA = math::pi / 30.0; - size_t const sectorsCount = static_cast(floor(fabs(endA - startA) / sectorA)); - sectorA = (endA - startA) / sectorsCount; + m2::PointD rectPts[4]; - for (size_t i = 0; i <= sectorsCount; ++i) - pts.push_back(m2::Shift(m2::Rotate(m2::PointD(r, 0), startA + i * sectorA), center)); + r.GetGlobalPoints(rectPts); + swap(rectPts[2], rectPts[3]); + + m2::PointF rectPtsF[4]; + for (int i = 0; i < 4; ++i) + rectPtsF[i] = m2::PointF(rectPts[i].x, rectPts[i].y); + + shared_ptr texture = skin()->page(style->m_pipelineID)->texture(); + + if (!texture) + { + LOG(LDEBUG, ("returning as no texture is reserved")); + return; } - void ShapeRenderer::drawSector(m2::PointD const & center, double startA, double endA, double r, graphics::Color const & c, double depth) + m2::PointF texPt = texture->mapPixel(m2::RectF(style->m_texRect).Center()); + + m2::PointF normal(0, 0); + + addTexturedStripStrided( + rectPtsF, + sizeof(m2::PointF), + &normal, + 0, + &texPt, + 0, + 4, + depth, + style->m_pipelineID); + } + + void ShapeRenderer::drawRectangle(m2::RectD const & r, graphics::Color const & c, double depth) + { + ResourceStyle const * style = skin()->fromID(skin()->mapColor(c)); + + if (style == 0) { - vector pts; - - pts.push_back(center); - approximateArc(center, startA, endA, r, pts); - pts.push_back(center); - - if (pts.size() < 3) - return; - - drawPath(&pts[0], pts.size(), 0, skin()->mapPenInfo(graphics::PenInfo(c, 2, 0, 0, 0)), depth); + LOG(LINFO, ("cannot map color")); + return; } - void ShapeRenderer::fillSector(m2::PointD const & center, double startA, double endA, double r, graphics::Color const & c, double depth) + m2::PointF rectPts[4] = { + m2::PointF(r.minX(), r.minY()), + m2::PointF(r.maxX(), r.minY()), + m2::PointF(r.minX(), r.maxY()), + m2::PointF(r.maxX(), r.maxY()) + }; + + shared_ptr texture = skin()->page(style->m_pipelineID)->texture(); + + if (!texture) { - vector arcPts; - - arcPts.push_back(center); - approximateArc(center, startA, endA, r, arcPts); - - if (arcPts.size() < 3) - return; - - m2::PointD pt0 = arcPts[0]; - m2::PointD pt1 = arcPts[1]; - - vector sectorPts; - - for (size_t i = 2; i < arcPts.size(); ++i) - { - sectorPts.push_back(pt0); - sectorPts.push_back(pt1); - sectorPts.push_back(arcPts[i]); - pt1 = arcPts[i]; - } - - drawTrianglesList(§orPts[0], sectorPts.size(), skin()->mapColor(c), depth); + LOG(LDEBUG, ("returning as no texture is reserved")); + return; } - void ShapeRenderer::drawRectangle(m2::AnyRectD const & r, graphics::Color const & c, double depth) - { - ResourceStyle const * style = skin()->fromID(skin()->mapColor(c)); + m2::PointF texPt = texture->mapPixel(m2::RectF(style->m_texRect).Center()); - if (style == 0) - { - LOG(LINFO, ("cannot map color")); - return; - } + m2::PointF normal(0, 0); - m2::PointD rectPts[4]; - - r.GetGlobalPoints(rectPts); - swap(rectPts[2], rectPts[3]); - - m2::PointF rectPtsF[4]; - for (int i = 0; i < 4; ++i) - rectPtsF[i] = m2::PointF(rectPts[i].x, rectPts[i].y); - - shared_ptr texture = skin()->page(style->m_pipelineID)->texture(); - - if (!texture) - { - LOG(LDEBUG, ("returning as no texture is reserved")); - return; - } - - m2::PointF texPt = texture->mapPixel(m2::RectF(style->m_texRect).Center()); - - m2::PointF normal(0, 0); - - addTexturedStripStrided( - rectPtsF, - sizeof(m2::PointF), - &normal, - 0, - &texPt, - 0, - 4, - depth, - style->m_pipelineID); - } - - void ShapeRenderer::drawRectangle(m2::RectD const & r, graphics::Color const & c, double depth) - { - ResourceStyle const * style = skin()->fromID(skin()->mapColor(c)); - - if (style == 0) - { - LOG(LINFO, ("cannot map color")); - return; - } - - m2::PointF rectPts[4] = { - m2::PointF(r.minX(), r.minY()), - m2::PointF(r.maxX(), r.minY()), - m2::PointF(r.minX(), r.maxY()), - m2::PointF(r.maxX(), r.maxY()) - }; - - shared_ptr texture = skin()->page(style->m_pipelineID)->texture(); - - if (!texture) - { - LOG(LDEBUG, ("returning as no texture is reserved")); - return; - } - - m2::PointF texPt = texture->mapPixel(m2::RectF(style->m_texRect).Center()); - - m2::PointF normal(0, 0); - - addTexturedStripStrided( + addTexturedStripStrided( rectPts, sizeof(m2::PointF), &normal, @@ -174,74 +172,74 @@ namespace graphics depth, style->m_pipelineID ); + } + + void ShapeRenderer::drawRoundedRectangle(m2::RectD const & r, double rad, graphics::Color const & c, double depth) + { + ResourceStyle const * style = skin()->fromID(skin()->mapColor(c)); + + if (style == 0) + { + LOG(LINFO, ("cannot map color")); + return; } - void ShapeRenderer::drawRoundedRectangle(m2::RectD const & r, double rad, graphics::Color const & c, double depth) + shared_ptr texture = skin()->page(style->m_pipelineID)->texture(); + + if (!texture) { - ResourceStyle const * style = skin()->fromID(skin()->mapColor(c)); + LOG(LDEBUG, ("returning as no texture is reserved")); + return; + } - if (style == 0) - { - LOG(LINFO, ("cannot map color")); - return; - } + m2::PointF texPt = texture->mapPixel(m2::RectF(style->m_texRect).Center()); - shared_ptr texture = skin()->page(style->m_pipelineID)->texture(); + vector seg00; + vector seg10; + vector seg11; + vector seg01; - if (!texture) - { - LOG(LDEBUG, ("returning as no texture is reserved")); - return; - } + approximateArc(m2::PointD(r.minX() + rad, r.minY() + rad), + math::pi, + 3 * math::pi / 2, + rad, + seg00); - m2::PointF texPt = texture->mapPixel(m2::RectF(style->m_texRect).Center()); + approximateArc(m2::PointD(r.minX() + rad, r.maxY() - rad), + math::pi / 2, + math::pi, + rad, + seg01); - vector seg00; - vector seg10; - vector seg11; - vector seg01; + approximateArc(m2::PointD(r.maxX() - rad, r.maxY() - rad), + 0, + math::pi / 2, + rad, + seg11); - approximateArc(m2::PointD(r.minX() + rad, r.minY() + rad), - math::pi, - 3 * math::pi / 2, - rad, - seg00); + approximateArc(m2::PointD(r.maxX() - rad, r.minY() + rad), + 3 * math::pi / 2, + math::pi * 2, + rad, + seg10); - approximateArc(m2::PointD(r.minX() + rad, r.maxY() - rad), - math::pi / 2, - math::pi, - rad, - seg01); + vector pts; - approximateArc(m2::PointD(r.maxX() - rad, r.maxY() - rad), - 0, - math::pi / 2, - rad, - seg11); + for (unsigned i = 0; i < seg11.size(); ++i) + pts.push_back(m2::PointF(seg11[i])); - approximateArc(m2::PointD(r.maxX() - rad, r.minY() + rad), - 3 * math::pi / 2, - math::pi * 2, - rad, - seg10); + for (unsigned i = 0; i < seg01.size(); ++i) + pts.push_back(m2::PointF(seg01[i])); - vector pts; + for (unsigned i = 0; i < seg00.size(); ++i) + pts.push_back(m2::PointF(seg00[i])); - for (unsigned i = 0; i < seg11.size(); ++i) - pts.push_back(m2::PointF(seg11[i])); + for (unsigned i = 0; i < seg10.size(); ++i) + pts.push_back(m2::PointF(seg10[i])); - for (unsigned i = 0; i < seg01.size(); ++i) - pts.push_back(m2::PointF(seg01[i])); + m2::PointF normal(0, 0); - for (unsigned i = 0; i < seg00.size(); ++i) - pts.push_back(m2::PointF(seg00[i])); - - for (unsigned i = 0; i < seg10.size(); ++i) - pts.push_back(m2::PointF(seg10[i])); - - m2::PointF normal(0, 0); - - addTexturedFanStrided( + addTexturedFanStrided( &pts[0], sizeof(m2::PointF), &normal, @@ -252,7 +250,5 @@ namespace graphics depth, style->m_pipelineID ); - } - } } diff --git a/graphics/shape_renderer.hpp b/graphics/shape_renderer.hpp index cea20fab0d..e9e685e166 100644 --- a/graphics/shape_renderer.hpp +++ b/graphics/shape_renderer.hpp @@ -6,60 +6,57 @@ namespace graphics { - namespace gl + class ShapeRenderer : public PathRenderer { - class ShapeRenderer : public PathRenderer - { - private: - typedef PathRenderer base_t; - public: + private: + typedef PathRenderer base_t; + public: - ShapeRenderer(base_t::Params const & params); + ShapeRenderer(base_t::Params const & params); - void drawConvexPolygon(m2::PointF const * points, - size_t pointsCount, - graphics::Color const & color, - double depth); + void drawConvexPolygon(m2::PointF const * points, + size_t pointsCount, + Color const & color, + double depth); - static void approximateArc(m2::PointD const & center, - double startA, - double endA, - double r, - vector & pts); + static void approximateArc(m2::PointD const & center, + double startA, + double endA, + double r, + vector & pts); - void drawArc(m2::PointD const & center, - double startA, - double endA, - double r, - graphics::Color const & c, - double depth); + void drawArc(m2::PointD const & center, + double startA, + double endA, + double r, + Color const & c, + double depth); - void drawSector(m2::PointD const & center, - double startA, - double endA, - double r, - graphics::Color const & c, - double depth); + void drawSector(m2::PointD const & center, + double startA, + double endA, + double r, + Color const & c, + double depth); - void fillSector(m2::PointD const & center, - double startA, - double endA, - double r, - graphics::Color const & c, - double depth); + void fillSector(m2::PointD const & center, + double startA, + double endA, + double r, + Color const & c, + double depth); - void drawRectangle(m2::AnyRectD const & r, - graphics::Color const & c, - double depth); + void drawRectangle(m2::AnyRectD const & r, + Color const & c, + double depth); - void drawRectangle(m2::RectD const & r, - graphics::Color const & c, - double depth); + void drawRectangle(m2::RectD const & r, + Color const & c, + double depth); - void drawRoundedRectangle(m2::RectD const & r, - double rad, - graphics::Color const & c, - double depth); - }; - } + void drawRoundedRectangle(m2::RectD const & r, + double rad, + Color const & c, + double depth); + }; } diff --git a/graphics/skin.cpp b/graphics/skin.cpp index caef41da1f..bc6ae971b5 100644 --- a/graphics/skin.cpp +++ b/graphics/skin.cpp @@ -149,6 +149,23 @@ namespace graphics return packID(m_dynamicPage, m_pages[m_dynamicPage]->mapCircleInfo(circleInfo)); } + uint32_t Skin::mapImageInfo(ImageInfo const & imageInfo) + { + uint32_t res = invalidPageHandle(); + + for (uint8_t i = 0; i < m_pages.size(); ++i) + { + res = m_pages[i]->findImageInfo(imageInfo); + if (res != invalidPageHandle()) + return packID(i, res); + } + + if (!m_pages[m_dynamicPage]->hasRoom(imageInfo)) + flushDynamicPage(); + + return packID(m_dynamicPage, m_pages[m_dynamicPage]->mapImageInfo(imageInfo)); + } + bool Skin::mapPenInfo(PenInfo const * penInfos, uint32_t * styleIDS, size_t count) { int startDynamicPage = m_dynamicPage; diff --git a/graphics/skin.hpp b/graphics/skin.hpp index e9bd4277ee..4b609d62e1 100644 --- a/graphics/skin.hpp +++ b/graphics/skin.hpp @@ -28,6 +28,7 @@ namespace graphics struct ResourceStyle; struct PenInfo; struct CircleInfo; + struct ImageInfo; struct Color; struct GlyphKey; class GlyphCache; @@ -125,6 +126,10 @@ namespace graphics /// if found - return id /// if not - pack and return id uint32_t mapCircleInfo(CircleInfo const & circleInfo); + /// find imageInfo on texture + /// if found - return id + /// if not - pack and return id + uint32_t mapImageInfo(ImageInfo const & imageInfo); /// adding function which will be called, when some SkinPage /// is getting cleared. diff --git a/graphics/skin_page.cpp b/graphics/skin_page.cpp index 98cf268d31..bb85d81a30 100644 --- a/graphics/skin_page.cpp +++ b/graphics/skin_page.cpp @@ -49,6 +49,7 @@ namespace graphics clearColorHandles(); clearFontHandles(); clearCircleInfoHandles(); + clearImageInfoHandles(); m_packer.reset(); } @@ -96,6 +97,49 @@ namespace graphics m_glyphMap.clear(); } + void SkinPage::clearImageInfoHandles() + { + for (TImageInfoMap::const_iterator it = m_imageInfoMap.begin(); + it != m_imageInfoMap.end(); + ++it) + m_styles.erase(it->second); + + m_imageInfoMap.clear(); + } + + uint32_t SkinPage::findImageInfo(ImageInfo const & ii) const + { + TImageInfoMap::const_iterator it = m_imageInfoMap.find(ii); + if (it == m_imageInfoMap.end()) + return m_packer.invalidHandle(); + else + return it->second; + } + + uint32_t SkinPage::mapImageInfo(ImageInfo const & ii) + { + uint32_t foundHandle = findImageInfo(ii); + if (foundHandle != m_packer.invalidHandle()) + return foundHandle; + + m2::Packer::handle_t h = m_packer.pack(ii.width() + 4, ii.height() + 4); + + m_imageInfoMap[ii] = h; + + m2::RectU texRect = m_packer.find(h).second; + shared_ptr imageStyle(new ImageStyle(texRect, m_pipelineID, ii)); + + m_styles[h] = imageStyle; + m_uploadQueue.push_back(imageStyle); + + return h; + } + + bool SkinPage::hasRoom(ImageInfo const & ii) const + { + return m_packer.hasRoom(ii.width() + 4, ii.height() + 4); + } + uint32_t SkinPage::findColor(graphics::Color const & c) const { TColorMap::const_iterator it = m_colorMap.find(c); diff --git a/graphics/skin_page.hpp b/graphics/skin_page.hpp index 90e693ae4a..3a370a21b8 100644 --- a/graphics/skin_page.hpp +++ b/graphics/skin_page.hpp @@ -9,6 +9,7 @@ #include "circle_info.hpp" #include "color.hpp" #include "glyph_cache.hpp" +#include "image_info.hpp" #include "packets_queue.hpp" namespace graphics @@ -59,6 +60,9 @@ namespace graphics typedef map TGlyphMap; TGlyphMap m_glyphMap; + typedef map TImageInfoMap; + TImageInfoMap m_imageInfoMap; + /// made mutable to implement lazy reservation of texture /// @{ mutable shared_ptr m_texture; @@ -84,6 +88,7 @@ namespace graphics void clearPenInfoHandles(); void clearFontHandles(); void clearCircleInfoHandles(); + void clearImageInfoHandles(); void clearHandles(); @@ -113,6 +118,10 @@ namespace graphics void resetTexture(); void createPacker(); + uint32_t findImageInfo(ImageInfo const & ii) const; + uint32_t mapImageInfo(ImageInfo const & ii); + bool hasRoom(ImageInfo const & ii) const; + uint32_t findColor(Color const & c) const; uint32_t mapColor(Color const & c); bool hasRoom(Color const & c) const; diff --git a/graphics/text_renderer.hpp b/graphics/text_renderer.hpp index 5f8e45af22..334353818d 100644 --- a/graphics/text_renderer.hpp +++ b/graphics/text_renderer.hpp @@ -1,6 +1,6 @@ #pragma once -#include "shape_renderer.hpp" +#include "image_renderer.hpp" #include "defines.hpp" #include "font_desc.hpp" #include "text_element.hpp" @@ -14,7 +14,7 @@ namespace graphics { namespace gl { - class TextRenderer : public ShapeRenderer + class TextRenderer : public ImageRenderer { private: @@ -23,7 +23,7 @@ namespace graphics public: - typedef ShapeRenderer base_t; + typedef ImageRenderer base_t; struct Params : base_t::Params { diff --git a/graphics/texture.hpp b/graphics/texture.hpp index 6bfa592153..49861e9f9d 100644 --- a/graphics/texture.hpp +++ b/graphics/texture.hpp @@ -2,6 +2,7 @@ #include "managed_texture.hpp" #include "data_traits.hpp" +#include "image_info.hpp" #include "../platform/platform.hpp" @@ -18,12 +19,6 @@ namespace graphics template class Texture{}; - inline m2::PointU const GetDimensions(string const & fileName) - { - ReaderPtr reader = GetPlatform().GetReader(fileName); - gil::point2 size = gil::lodepng_read_dimensions(reader); - return m2::PointU(size.x, size.y); - } template class Texture : public BaseTexture diff --git a/qt_tstfrm/macros.hpp b/qt_tstfrm/macros.hpp index ac85415562..fc249faf64 100644 --- a/qt_tstfrm/macros.hpp +++ b/qt_tstfrm/macros.hpp @@ -111,10 +111,7 @@ public: virtual void DoDraw(shared_ptr p) { - p->beginFrame(); - p->clear(graphics::gl::Screen::s_bgColor); test.DoDraw(p); - p->endFrame(); } virtual void DoResize(int, int) { diff --git a/qt_tstfrm/tstwidgets.cpp b/qt_tstfrm/tstwidgets.cpp index c7f69d3156..7d6ab3a293 100644 --- a/qt_tstfrm/tstwidgets.cpp +++ b/qt_tstfrm/tstwidgets.cpp @@ -96,7 +96,7 @@ void GLDrawWidget::initializeGL() false); rmp.m_primaryTexturesParams = graphics::ResourceManager::TexturePoolParams(512, - 256, + 512, 10, rmp.m_texFormat, true,