Его лучшее для использования его для каждого метода, предназначенного как переопределение и Java 6 +, каждый метод, предназначенный как реализация интерфейса.
Первый, это ловит орфографические ошибки как" hashcode()
" вместо" hashCode()
" во время компиляции. Это может быть экранирующим для отладки, почему результат метода, кажется, не соответствует коду, когда реальная причина состоит в том, что код никогда не вызывается.
кроме того, если суперкласс изменяет сигнатуру метода, переопределения более старой подписи могут быть "осиротевшими", оставлены позади как путающий мертвый код. @Override
аннотация поможет Вам определить эти висячие строки так, чтобы они могли быть изменены для соответствия новой подписи.
Одна проблема, которую я вижу из кода, заключается в том, что вы не очищаете свой контекст перед рисованием изображения. Поскольку ваше изображение содержит прозрачные области и построено на фоне, вы просто видите, что находится в памяти, выделенной malloc. Попробуйте установить режим Quartz Blend для копирования перед рисованием изображения:
CGContextSetBlendMode(textureContext, kCGBlendModeCopy);
Вы также можете использовать calloc вместо malloc, поскольку calloc дает вам обнуленную память.
Ваше смешивание OpenGL правильно:
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
дает вам Porter-Duff " OVER ", чего вы обычно и хотите.
Попробуйте сначала стереть CGContextRef:
CGContextSetRGBFillColor(ctxt, 1, 1, 1, 0);
CGContextFillRect(ctxt, CGRectMake(0, 0, w, h));
Скорее всего, в вашем изображении есть цветные пиксели с нулевым значением альфа, но вы их показываете из-за функции смешивания. Попробуйте
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);