Edit: tested with MMA 11.1, option Exclusions -> None added to recover the previous behavior.
I have found that my approach with textures has different applications:
Now I want to use it for the enhancement of the DensityPlot:
Options[fastDensityPlot] = Append[Options[DensityPlot], Subpoints -> 30];
SyntaxInformation[fastDensityPlot] = SyntaxInformation[DensityPlot];
fastDensityPlot[f_, {x_, xmin_, xmax_}, {y_, ymin_, ymax_}, opts : OptionsPattern[]] :=
DensityPlot[f, {x, xmin, xmax}, {y, ymin, ymax},
Evaluate@FilterRules[{opts}, Except@Subpoints]] // Normal // toTriangles //
texturize[Function[{#1, #2}, #3] & @@ {x, y, f},
OptionValue[Subpoints], OptionValue[ColorFunction]]
Here Normal converts GraphicsComplex to separate polygons, toTriangles splits polygons to triangles, and texturize puts textures on every triangle (defined below), f is assumed to be Listable.
f[x_, y_] := (x^2 + y^2) Exp[-x^2 - y^2] Sin[10 Sqrt[x^2 + y^2] + 10 ArcTan[x, y]]^4;
fastDensityPlot[f[x, y], {x, -3, 3}, {y, -3, 3}, PlotPoints -> 10,
MaxRecursion -> 2, ColorFunction -> Hue, Subpoints -> 20,
PlotRange -> All, ImageSize -> 600, Exclusions -> None]

This image looks a bit better. At the same time fastDensityPlot is ~10 times faster then the regular DensityPlot, MaxMemoryUsed is only 64MB and ByteCount is 10MB.
One can see that fastDensityPlot uses the advantage of the non-equidistant mesh:
fastDensityPlot[f[x, y], {x, -3, 3}, {y, -3, 3}, PlotPoints -> 10,
MaxRecursion -> 2, ColorFunction -> Hue, Subpoints -> 20,
PlotRange -> All, ImageSize -> 600, Mesh -> All, Exclusions -> None]

Definitions of the above functions:
toTriangles = # /. Polygon[v_ /; Length[v] > 3, ___] :> (Polygon@Append[#, Mean[v]] & /@
Partition[v, 2, 1, 1]) &;
texturize[f_, n_, colf_] := # /. Polygon[{v1_, v2_, v3_}, ___] :> {Texture@
ImageData@Colorize[
Image@f[v3[[1]] + (v1[[1]] - v3[[1]]) #1 + (v2[[1]] - v3[[1]]) #2,
v3[[2]] + (v1[[2]] - v3[[2]]) #1 + (v2[[2]] - v3[[2]]) #2]
&[#, Transpose[#]] &@ConstantArray[Range[-1./n, 1 + 1./n, 1./n], n + 3],
ColorFunction -> colf, ColorFunctionScaling -> False],
Polygon[{v1, v2, v3},
VertexTextureCoordinates -> {{1 - 1.5/(n + 3),
1 - 1.5/(n + 3)}, {1.5/(n + 3), 1.5/(n + 3)}, {1.5/(n + 3),
1 - 1.5/(n + 3)}}]} &;
As in the linked answer, I add textures to every triangle with an appropriate rectangular grid. This method is fast because it uses packed arrays.
Subpoints^2 regions and calculate values offin the nodes. Is it correct? – Alexey Popkov Jan 05 '14 at 14:24PlotPoints->n, Subpoints->m, MaxRecursion->0should be equivalent toPlotPoints->n*m, Subpoints->0, MaxRecursion->0? – Alexey Popkov Jan 05 '14 at 14:45Subpoints->1in the second case. – ybeltukov Jan 05 '14 at 15:03ByteCountfor the first plot returns883816while for the second plot it gives34814392? – Alexey Popkov Jan 05 '14 at 15:38fastDensityPlotis fast when you use a small number of big triangles with big textures (two big triangles in the limit). The opposite limit isDensityPlotwhich produce a lot of small colorized (not texturized) triangles. – ybeltukov Jan 05 '14 at 15:52fastDensityPlotaccepting only aPureFunctionwhich must contain onlyListablefunctions makes it unusable for many practical applications where these requirements are unfeasible. This requirement also makes your code very difficult for debugging and understanding. – Alexey Popkov Jan 05 '14 at 16:55f[x_,y_] := .... WithoutListableI will lose advantages of packed arrays. In any case you can: 1) addListableattribute tof, 2) useInterpolationwhich isListable, 3)CompilewithListableattribute. – ybeltukov Jan 05 '14 at 18:01SetAttributes[f,Listable]; f[x_,y_]:=(x^2+y^2) Exp[-x^2-y^2] Sin[10 Sqrt[x^2+y^2]+10 ArcTan[x,y]]^4; fastDensityPlot[f[x,y],{x,-3,3},{y,-3,3},PlotPoints->10,MaxRecursion->2,ColorFunction->Hue,Subpoints->20,PlotRange->All]I get many error messages and empty graphics. – Alexey Popkov Jan 05 '14 at 18:37toTrianglesdoes not work. Could you check the full form of your result? Is there anyPolygon[...]expressions? – ybeltukov Dec 19 '19 at 19:40Polygon[{{2.833333333333333, -2.8333333333333335}, {3., -2.666666666666667}, \ {2.666666666666666, -2.666666666666667}}, VertexColors -> {Hue[1.236068478360077*^-6], Hue[4.324625545000996*^-6], Hue[0.00002590501983329312]}]– Mr.Wizard Dec 19 '19 at 22:09toTrianglesdoes nothing because this polygon is already a triangle. The problem is somewhere further. Does the final result contain texturized triangles of the form{Texture[{...}],Polygon[{...},VertexTextureCoordinates->{...}]}? If so, it is a frontend problem. – ybeltukov Dec 20 '19 at 19:46toTrianglesandtexturizewere being loaded from (38688) rather than this answer. – Mr.Wizard Dec 22 '19 at 01:16