# What happened to the Direct2D Renderer?

**URL:** https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487
**Category:** General JUCE discussion
**Created:** [January 27, 2016, 10:08am UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487 "2016-01-27T10:08:25Z")
**Posts on this page:** 13
**Page:** 1

<div class="post-metadata">

### Author: ![chkn](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/chkn/32/3862_2.png) [@chkn](https://forum.juce.com/u/chkn)
#### Post date: [January 27, 2016, 10:08am UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/1 "2016-01-27T10:08:25Z")

</div>

I want to speed up drawing on Windows, the OpenGL-Context&nbsp;in Plugins seems to be to unstable (escpacially on windows, driver issues etc.)

I looks like the Direct2-Context&nbsp;was never finished?

&nbsp;

---

<div class="post-metadata">

### Author: ![jules](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@jules](https://forum.juce.com/u/jules)
#### Post date: [January 27, 2016, 10:22am UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/2 "2016-01-27T10:22:47Z")

</div>

Actually, I had completely forgotten about its existence until recently, but a couple of weeks ago I fired it up and was surprised to find that it seems to work perfectly. Whether or not it's faster is something I'd be interested to hear about if you try it.

---

<div class="post-metadata">

### Author: ![chkn](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/chkn/32/3862_2.png) [@chkn](https://forum.juce.com/u/chkn)
#### Post date: [January 27, 2016, 12:22pm UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/3 "2016-01-27T12:22:29Z")

</div>

When i define&nbsp;JUCE\_DIRECT2D&nbsp;i got a lot of different errors while compiling the JUCE demo, did i miss something?

So windows uses still use the software renderer&nbsp;per default, so no GPU involved for graphics processing?

&nbsp;

> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(128): warning C4996: 'juce::Rectangle\<ValueType\>::transformed': was declared deprecated  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;with  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ValueType=float  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;] (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\geometry\juce\_rectangle.h(908) : see declaration of 'juce::Rectangle\<ValueType\>::transformed'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;with  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ValueType=float  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;]  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(134): warning C4996: 'juce::Rectangle\<ValueType\>::transformed': was declared deprecated  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;with  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ValueType=float  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;] (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\geometry\juce\_rectangle.h(908) : see declaration of 'juce::Rectangle\<ValueType\>::transformed'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;with  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ValueType=float  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;]  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(151): error C2146: syntax error : missing ';' before identifier 'states' (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(290): error C2660: 'juce::DirectWriteTypeLayout::drawToD2DContext' : function does not take 6 arguments (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(534): error C2248: 'juce::WindowsDirectWriteTypeface::unitsToHeightScaleFactor' : cannot access private member declared in class 'juce::WindowsDirectWriteTypeface' (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_directwritetypeface.cpp(269) : see declaration of 'juce::WindowsDirectWriteTypeface::unitsToHeightScaleFactor'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_directwritetypeface.cpp(136) : see declaration of 'juce::WindowsDirectWriteTypeface'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(534): error C2064: term does not evaluate to a function taking 0 arguments (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(725): error C2660: 'juce::Direct2DLowLevelGraphicsContext::pointTransformed' : function does not take 2 arguments (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(726): error C2660: 'juce::Direct2DLowLevelGraphicsContext::pointTransformed' : function does not take 2 arguments (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(727): error C2660: 'juce::Direct2DLowLevelGraphicsContext::pointTransformed' : function does not take 2 arguments (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(728): error C2660: 'juce::Direct2DLowLevelGraphicsContext::pointTransformed' : function does not take 2 arguments (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(735): error C2227: left of '-\>d2dFactory' must point to class/struct/union/generic type (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(735): error C2227: left of '-\>CreatePathGeometry' must point to class/struct/union/generic type (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(813): error C2227: left of '-\>d2dFactory' must point to class/struct/union/generic type (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_graphics\native\juce\_win32\_direct2dgraphicscontext.cpp(813): error C2227: left of '-\>CreatePathGeometry' must point to class/struct/union/generic type (..\..\..\..\modules\juce\_graphics\juce\_graphics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1139): error C2065: 'Direct2DLowLevelGraphicsContext' : undeclared identifier (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1139): error C2923: 'juce::ScopedPointer' : 'Direct2DLowLevelGraphicsContext' is not a valid template type argument for parameter 'ObjectType' (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(569): error C2512: 'juce::ScopedPointer' : no appropriate default constructor available (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(606): error C2678: binary '=' : no operator found which takes a left-hand operand of type 'juce::ScopedPointer' (or there is no acceptable conversion) (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(111): could be 'juce::ScopedPointer\<ObjectType\> &juce::ScopedPointer\<ObjectType\>::operator =(juce::ScopedPointer\<ObjectType\> &)'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(135): or &nbsp; &nbsp; &nbsp; 'juce::ScopedPointer\<ObjectType\> &juce::ScopedPointer\<ObjectType\>::operator =(ObjectType \*const )'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(154): or &nbsp; &nbsp; &nbsp; 'juce::ScopedPointer\<ObjectType\> &juce::ScopedPointer\<ObjectType\>::operator =(juce::ScopedPointer\<ObjectType\> &&) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while trying to match the argument list '(juce::ScopedPointer, nullptr)'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(606): error C2582: 'operator =' function is unavailable in 'juce::ScopedPointer' (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(649): error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'juce::ScopedPointer' (or there is no acceptable conversion) (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1344): could be 'bool juce::operator !=(const juce::String &,const juce::String &) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1346): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,const char \*) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1348): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,const wchar\_t \*) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1350): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,const juce::CharPointer\_UTF8) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1352): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,const juce::CharPointer\_UTF16) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1354): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,const juce::CharPointer\_UTF32) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_stringref.h(132): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,juce::StringRef) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\containers\juce\_variant.h(319): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::var &,const juce::var &) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\containers\juce\_variant.h(321): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::var &,const juce::String &)'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\containers\juce\_variant.h(323): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::var &,const char \*)'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\time\juce\_relativetime.h(166): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(juce::RelativeTime,juce::RelativeTime) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\time\juce\_time.h(396): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(juce::Time,juce::Time) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\components\juce\_desktop.cpp(327): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::Desktop::Displays::Display &,const juce::Desktop::Displays::Display &) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while trying to match the argument list '(juce::ScopedPointer, nullptr)'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(650): error C2678: binary '-\>' : no operator found which takes a left-hand operand of type 'juce::ScopedPointer' (or there is no acceptable conversion) (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(173): could be 'ObjectType \*juce::ScopedPointer\<ObjectType\>::operator -\>(void) throw() const'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while trying to match the argument list '(juce::ScopedPointer)'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(650): error C2039: 'resized' : is not a member of 'juce::ScopedPointer' (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(71) : see declaration of 'juce::ScopedPointer'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1504): error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'juce::ScopedPointer' (or there is no acceptable conversion) (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1344): could be 'bool juce::operator !=(const juce::String &,const juce::String &) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1346): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,const char \*) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1348): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,const wchar\_t \*) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1350): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,const juce::CharPointer\_UTF8) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1352): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,const juce::CharPointer\_UTF16) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1354): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,const juce::CharPointer\_UTF32) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_stringref.h(132): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::String &,juce::StringRef) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\containers\juce\_variant.h(319): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::var &,const juce::var &) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\containers\juce\_variant.h(321): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::var &,const juce::String &)'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\containers\juce\_variant.h(323): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::var &,const char \*)'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\time\juce\_relativetime.h(166): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(juce::RelativeTime,juce::RelativeTime) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\time\juce\_time.h(396): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(juce::Time,juce::Time) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\components\juce\_desktop.cpp(327): or &nbsp; &nbsp; &nbsp; 'bool juce::operator !=(const juce::Desktop::Displays::Display &,const juce::Desktop::Displays::Display &) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while trying to match the argument list '(juce::ScopedPointer, nullptr)'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1510): error C2678: binary '-\>' : no operator found which takes a left-hand operand of type 'juce::ScopedPointer' (or there is no acceptable conversion) (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(173): could be 'ObjectType \*juce::ScopedPointer\<ObjectType\>::operator -\>(void) throw() const'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while trying to match the argument list '(juce::ScopedPointer)'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1510): error C2039: 'start' : is not a member of 'juce::ScopedPointer' (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(71) : see declaration of 'juce::ScopedPointer'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1511): error C2678: binary '-\>' : no operator found which takes a left-hand operand of type 'juce::ScopedPointer' (or there is no acceptable conversion) (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(173): could be 'ObjectType \*juce::ScopedPointer\<ObjectType\>::operator -\>(void) throw() const'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while trying to match the argument list '(juce::ScopedPointer)'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1511): error C2039: 'clipToRectangle' : is not a member of 'juce::ScopedPointer' (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(71) : see declaration of 'juce::ScopedPointer'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1512): error C2678: binary '\*' : no operator found which takes a left-hand operand of type 'juce::ScopedPointer' (or there is no acceptable conversion) (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(170): could be 'ObjectType &juce::ScopedPointer\<ObjectType\>::operator \*(void) throw() const'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while trying to match the argument list '(juce::ScopedPointer)'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1513): error C2678: binary '-\>' : no operator found which takes a left-hand operand of type 'juce::ScopedPointer' (or there is no acceptable conversion) (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(173): could be 'ObjectType \*juce::ScopedPointer\<ObjectType\>::operator -\>(void) throw() const'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while trying to match the argument list '(juce::ScopedPointer)'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1513): error C2039: 'end' : is not a member of 'juce::ScopedPointer' (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(71) : see declaration of 'juce::ScopedPointer'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1520): error C2065: 'rgn' : undeclared identifier (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1536): error C2065: 'rgn' : undeclared identifier (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1539): error C2065: 'rgn' : undeclared identifier (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1677): error C2678: binary '=' : no operator found which takes a left-hand operand of type 'juce::ScopedPointer' (or there is no acceptable conversion) (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(111): could be 'juce::ScopedPointer\<ObjectType\> &juce::ScopedPointer\<ObjectType\>::operator =(juce::ScopedPointer\<ObjectType\> &)'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(135): or &nbsp; &nbsp; &nbsp; 'juce::ScopedPointer\<ObjectType\> &juce::ScopedPointer\<ObjectType\>::operator =(ObjectType \*const )'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\memory\juce\_scopedpointer.h(154): or &nbsp; &nbsp; &nbsp; 'juce::ScopedPointer\<ObjectType\> &juce::ScopedPointer\<ObjectType\>::operator =(juce::ScopedPointer\<ObjectType\> &&) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while trying to match the argument list '(juce::ScopedPointer, int)'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1677): error C2582: 'operator =' function is unavailable in 'juce::ScopedPointer' (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1678): error C2678: binary '==' : no operator found which takes a left-hand operand of type 'juce::ScopedPointer' (or there is no acceptable conversion) (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1331): could be 'bool juce::operator ==(const juce::String &,const juce::String &) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1333): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(const juce::String &,const char \*) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1335): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(const juce::String &,const wchar\_t \*) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1337): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(const juce::String &,const juce::CharPointer\_UTF8) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1339): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(const juce::String &,const juce::CharPointer\_UTF16) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_string.h(1341): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(const juce::String &,const juce::CharPointer\_UTF32) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\text\juce\_stringref.h(130): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(const juce::String &,juce::StringRef) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\containers\juce\_variant.h(317): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(const juce::var &,const juce::var &) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\containers\juce\_variant.h(320): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(const juce::var &,const juce::String &)'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\containers\juce\_variant.h(322): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(const juce::var &,const char \*)'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\time\juce\_relativetime.h(164): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(juce::RelativeTime,juce::RelativeTime) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_core\time\juce\_time.h(394): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(juce::Time,juce::Time) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\components\juce\_desktop.cpp(318): or &nbsp; &nbsp; &nbsp; 'bool juce::operator ==(const juce::Desktop::Displays::Display &,const juce::Desktop::Displays::Display &) throw()'  
> 1\> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;while trying to match the argument list '(juce::ScopedPointer, int)'  
> 1\>c:\users\chkn\documents\cpp\_projects\jucequake\jucelatest\modules\juce\_gui\_basics\native\juce\_win32\_windowing.cpp(1679): error C2061: syntax error : identifier 'Direct2DLowLevelGraphicsContext' (..\..\..\..\modules\juce\_gui\_basics\juce\_gui\_basics.cpp)  
> &nbsp;

&nbsp;

---

<div class="post-metadata">

### Author: ![jules](https://avatars.discourse-cdn.com/v4/letter/j/41988e/32.png) [@jules](https://forum.juce.com/u/jules)
#### Post date: [January 27, 2016, 2:36pm UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/4 "2016-01-27T14:36:18Z")

</div>

Hmm, ok, maybe I was mistaken about that. Will look again when I get chance.

But yes, by default we're still using the software renderer.

---

<div class="post-metadata">

### Author: ![yfede](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/yfede/32/506_2.png) [@yfede](https://forum.juce.com/u/yfede)
#### Post date: [February 1, 2016, 11:54am UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/5 "2016-02-01T11:54:14Z")

</div>

+1 for enabling Direct2D rendering!

---

<div class="post-metadata">

### Author: ![jonathonracz](https://avatars.discourse-cdn.com/v4/letter/j/da6949/32.png) [@jonathonracz](https://forum.juce.com/u/jonathonracz)
#### Post date: [February 1, 2016, 8:30pm UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/6 "2016-02-01T20:30:27Z")

</div>

I'd love to see a proper Direct2D renderer. As it's been said, the GL renderer isn't without its issues, especially when it comes to the message thread locking when mixing JUCE drawing with GL drawing&nbsp;which honestly makes it unusable for general 2D GUI drawing&nbsp;as far as I'm aware because of all the wasted cycles. It's weird because it get significantly higher framerates but way more CPU usage.

The performance of the CoreGraphics rendering under OSX is awesome, but the speed of the software rendering under Windows once components start needing continous repainting&nbsp;is terrible.

---

<div class="post-metadata">

### Author: ![yfede](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/yfede/32/506_2.png) [@yfede](https://forum.juce.com/u/yfede)
#### Post date: [November 10, 2016, 8:54am UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/7 "2016-11-10T08:54:15Z")

</div>

In the thread linked below, @jules has stated that they are thinking about the features of JUCE v5.

What about adding the completion of the Direct2D renderer to the list?!?

The fact that a library so mature and good at cross platform and GUI still does not support it looks so silly to me… the more because it has been repeatedly mentioned in the forum that there is already something half finished for that.

> [@Juce convolution release estimate?](https://forum.juce.com/t/juce-convolution-release-estimate/18911/14):
>
> The JUCE team did help to design and release the BLOCKS SDK, because it’s a module in JUCE. But that’s basically done now, and we’re working on features for JUCE V5.

---

<div class="post-metadata">

### Author: ![jonathonracz](https://avatars.discourse-cdn.com/v4/letter/j/da6949/32.png) [@jonathonracz](https://forum.juce.com/u/jonathonracz)
#### Post date: [November 10, 2016, 4:24pm UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/8 "2016-11-10T16:24:25Z")

</div>

I’m wondering if it may be skipped over in favor of Vulkan/Metal support:

> [@SVG Development?](https://forum.juce.com/t/svg-development/15033/16):
>
> FYI we're planning to add new rendering engines for Vulkan +&nbsp;Apple Metal&nbsp;which use the GPU to rasterise paths, so this stuff should be very very fast in the future. The existing CoreGraphics + software renderers are CPU-bound (but still about as fast as a CPU renderer can be). The current GL renderer is faster, but still not as good as we'll be able to do with the next gen of GPU APIs.

In addition to having a LowLevelRender implementation for JUCE components I’m dying for a barebones Vulkan context component in JUCE to render in, and the supposed increases in performance from these new APIs sounds promising. Of course, this is back in August 2015 and we haven’t heard anything since, so who knows where it’s gone…

Unfortunately it doesn’t seem like JUCE’s software rendering performance has scaled extremely well with HiDPI displays (which is unavoidable) - let’s hope some hardware acceleration can fix that.

---

<div class="post-metadata">

### Author: ![yfede](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/yfede/32/506_2.png) [@yfede](https://forum.juce.com/u/yfede)
#### Post date: [May 10, 2017, 1:56pm UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/9 "2017-05-10T13:56:03Z")

</div>

An news about this, now that JUCE 5 has been released?

The software renderer on Windows is still quite slow in comparison with stuff on macOS

---

<div class="post-metadata">

### Author: ![jonathonracz](https://avatars.discourse-cdn.com/v4/letter/j/da6949/32.png) [@jonathonracz](https://forum.juce.com/u/jonathonracz)
#### Post date: [October 12, 2017, 4:36am UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/10 "2017-10-12T04:36:47Z")

</div>

What’s the status on this? [There was a fat commit back in June](https://github.com/WeAreROLI/JUCE/commit/0874e47a3536da3833da4dac284c0245e62b0275#diff-2998c45056850bd2bbeb586dbabc1f05) that looked promising, but as far as I can tell the Direct2D renderer still isn’t enabled by default on supported platforms…

---

<div class="post-metadata">

### Author: ![t0m](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.juce.com/t0m/32/16413_2.png) [@t0m](https://forum.juce.com/u/t0m)
#### Post date: [October 12, 2017, 7:22am UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/11 "2017-10-12T07:22:56Z")

</div>

It’s still on our todo list, but we’re not working on it at the moment. As it currently stands it’s an incomplete implementation.

---

<div class="post-metadata">

### Author: ![otristan](https://avatars.discourse-cdn.com/v4/letter/o/f0a364/32.png) [@otristan](https://forum.juce.com/u/otristan)
#### Post date: [November 17, 2020, 2:43pm UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/12 "2020-11-17T14:43:31Z")

</div>

Is this something that is being currently worked on ?  
Or maybe have you moved directly to a Vulkan based stuff ?

Thanks !

---

<div class="post-metadata">

### Author: ![cgleo](https://avatars.discourse-cdn.com/v4/letter/c/3ec8ea/32.png) [@cgleo](https://forum.juce.com/u/cgleo)
#### Post date: [February 4, 2021, 9:35am UTC](https://forum.juce.com/t/what-happened-to-the-direct2d-renderer/16487/13 "2021-02-04T09:35:28Z")

</div>

Are there some specific problems with implementing the Direct2D renderer in JUCE?  
I found that on recent hardware and Window 10 (hardware tessellation) Direct2D is extremely fast (~0 CPU and pretty moderate GPU strain) and I supose its also very reliable. At least it should be more reliable then the current OpenGL implementation on Windows. Why is this implementation not finished? I think it should be easy to do, but please correct me if I’m wrong. Thx
