야밤을 틈타 옛 생각에 물들어.. 한창 애플릿 클라이언트 만들던 2000-2001년 시절 백업해둔 시디를 뒤져보다가, 겨니와 열심히 만들던 가빠채팅 -_- 을 찾게 되었다.
암튼
java.awt.Canvas 클래스 내 EventDispatchThread (EDT) 안에서 getGraphics로 graphics context 를 가져온 뒤 여기다 setXORMode 를 입히고 fillRect 를 하면 엄청난 성능저하를 볼 수 있다. (setXORMode를 빼보니 빠르게 동작한다. 다른 부분은 아직 테스트해보지 않았음)
700x24 짜리 fillRect 하는데 2,000 ms 이상 걸린다고 하면 믿을 수 있겠는가 -_- offscreen buffer 에도 똑같이 setXORMode로 그려본 결과 이 부분에서는 전혀 성능 저하가 없다. 그나저나 2000년에 만든 코드여서 그런지 createGraphics 로 offscreen buffer를 만드는 등의 코드들이 여기저기 널려있는데, JDK 1.4부터 추가된 Canvas.createBufferStrategy 덕분에 createGraphics 는 더이상 쓸모가 없어보인다 -.-;
아무튼 미치고 팔짝 뛰겠다.
내 JRE 버전은 1.6.0_10 b14
위 코드가 멀쩡히 돌아가던 시절의 JRE는 MS JVM 1.1 -_-
참고로 옆 pc 에 깔려있던 jre 1.5 에서는 아무런 문제없이 작동한다.
테스트 코드
import java.awt.*;
public class test extends Canvas
{
public void paint( Graphics g )
{
g.setColor( Color.black );
g.fillRect( 0, 0, 400, 20 );
g.setXORMode( Color.red );
g.setColor( Color.yellow );
g.fillRect( 0, 0, 400, 20 );
g.setPaintMode();
}
public static void main( String[] args ) throws Exception
{
Frame f = new Frame("-_-");
f.setSize( 400, 400 );
f.setLayout(new BorderLayout());
f.add( new test() );
f.setVisible(true);
}
}
테스트 결과 jdk 1.6.0_10 계열에서만 생기는 문제인 듯 하다. 1.6.0_07 이하 버전에는 XORMode 가 정상적으로 동작한다.
GWT 1.5 RC1 도 그렇고.. 버전 올라가면서 느려지는 게 왜케 많아;;
Comments
9 thoughts shared
700x24면 직접 픽셀 루프를 돌면서 처리해도 그 정도는 안 걸리는데(정도가 아니라 순식간) ... 혹시 _10 windows JDK 빌드에 이상한 디버깅 코드가 들어가 있는 건 아닐런지? ㄷㄷㄷ
java 쪽 살짝 개발할 일 있어서, jdk 1.6.0_10 받아서 봤는데, 문서에 Swing이나 Java2D 쪽이 Windows에서 D3D 하드웨어 가속 처리가 기본이라고 하네요. D3D 인터페이스에서 직접적으로 XOR 연산을 지원하지 않아서 그런 경우 더 느려진다고 하는 듯...
근데 최신 그래픽 드라이버에 DirectX 9.0c 이상, Shader 2.0 이상의 VGA 요구 사항이 있는데, 이 정도면 Shader로 발라주면 될텐데... 아마 나중에는 고쳐서 나올 듯?
Continue Reading
Discover more thoughts and insights
샤이니가 ㅅㅑㅇㅣㄴㅣ로 보일 때
회사 일로 인스타그램 API 작업을 하는데 GraphQL 반환 값의 한글 자소가 분리되어 있고 Alacritty는 다른 터미널들 다 지원하는 NFC 지원을 안 해서 샤이니가 ㅅㅑㅇㅣㄴㅣ로 보여 빡치는 것이다. 깃헙
구글의 스타벅스 무선 인터넷 제공에 대한 단상
스타벅스에서는 무수히 많은 사람들의 수다가 핑크노이즈로 승화되어 딴 생각을 날려주고 집중을 도와준다. 이것은 스타벅스와 도서관의 차이점이다. 할 수 있는 일이 많지 않기 때문에 딴 짓을 할 기회가
오랜만에 MSN 비주얼드 하다
대단히 오랜만에 MSN 플러그인 게임인 비주얼드를 했다. 상대자는 므후훗승훈님. 가볍게 밟아주고 -\_- '비주얼드 경쟁자'를 보니 원래 알던 사람들의 기록들은 다 리셋댔나보다. 은해랑 승훈밖에 없네. 타자방